中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP面向對象之對象的示例分析

發布時間:2021-09-05 11:48:36 來源:億速云 閱讀:122 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關PHP面向對象之對象的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

面向對象 對象概念是面向對象技術的核心。在顯示世界里我們所面對的事情都是對象,如計算機、電視機、自行車等。在面向對象的程序設計中,對象是一個由信息及對信息進行處理的描述所組成的整體,是對現實世界的抽象.

對象的主要三個特性

對象的行為:可以對 對象施加那些操作,開燈,關燈就是行為。
對象的形態:當施加那些方法是對象如何響應,顏色,尺寸,外型。
對象的表示:對象的表示就相當于身份證,具體區分在相同的行為與狀態下有什么不同。

面向對象模型

面向對象的概念:

oop(面向對象的編程)它能是其代碼更加簡潔易于維護并且具有更強的可重性

1、PHP面向對象(三)

四、OOP的高級實踐

4.3 Static-靜態成員

<?php
date_default_timezone_set("PRC");
/**
 * 1. 類的定義以class關鍵字開始,后面跟著這個類的名稱。類的名稱命名通常每個單詞的第一個字母大寫。
 * 2. 定義類的屬性
 * 3. 定義類的方法
 * 4. 實例化類的對象
 * 5. 使用對象的屬性和方法
 */
class Human{
 public $name;
 public $height;
 public $weight;
public function eat($food){
 echo $this->name."'s eating ".$food."<br/>";
 }
}
class Animal{
 public $kind;
 public $gender;
}
class NbaPlayer extends Human{
 // 類的屬性的定義
public $name="Jordan";// 定義屬性
public $height="198cm";
 public $weight="98kg";
 public $team="Bull";
 public $playerNumber="23";
 private $age="44";
 public $president="David Stern";
 // 類的方法的定義
public function changePresident($newP){
 $this->president=$newP;
 }
 public function run() {
 echo "Running<br/>";
 }
public function jump(){
 echo "Jumping<br/>";
 }
 public function dribble(){
 echo "Dribbling<br/>";
 }
 public function shoot(){
 echo "Shooting<br/>";
 }
 public function dunk(){
 echo "Dunking<br/>";
 }
 public function pass(){
 echo "Passing<br/>";
 }
 public function getAge(){
 echo $this->name."'s age is ".$this->age;
 }
 function __construct($name, $height, $weight, $team, $playerNumber){
 print $name . ";" . $height . ";" . $weight . ";" . $team . ";" . $playerNumber."\n";
 $this->name = $name; // $this是php里面的偽變量,表示對象自身
$this->height = $height; // 通過$this可以設置對象的屬性值
$this->weight = $weight;
 $this->team = $team;
 $this->playerNumber = $playerNumber;
 }
}
/**
 * 1. 類實例化為對象時使用new關鍵字,new之后緊跟類的名稱和一對括號。
 * 2. 使用對象可以像使用其他值一樣進行賦值操作
 */
$jordan = new NbaPlayer("Jordan", "198cm","98kg","Bull","23");echo "<br/>";
$james=new NbaPlayer("James", "203cm", "120kg", "Heat", "6");echo "<br/>";
// 訪問對象的屬性使用的語法是->符號,后面跟著屬性的名稱
echo $jordan->name."<br/>";
// 調用對象的某個方法使用的語法是->符號,后面跟著方法的名稱和一對括號
$jordan->run();
$jordan->pass();
//子類調用父類的方法
$jordan->eat("apple");
//試著調用private,直接以及通過內部的public函數
//$jordan->age;
$jordan->getAge();echo "<br/>";
$jordan->changePresident("Adam Silver");
echo $jordan->president."<br/>";
echo $james->president."<br/>";
 直接從上述例子開始吧。
這里想得到的是,把兩位對象的某一個變量同時變掉。——用static
public static $president="David Stern";
 // 類的方法的定義
public static function changePresident($newP){
static::$president=$newP;//這里static換成self更符合規范
}

注意這里static的位置,以及,方法內的::

調用的方法也有所變動。

echo NbaPlayer::$president;echo "<br/>";
NbaPlayer::changePresident("Adam Silver");
echo NbaPlayer::$president;echo "<br/>";

也就是像之前說的,靜態成員就是個常量,所以不針對某個具體的對象(不受具體對象的約束)——基于此,定義&賦值&調用都不需要具體的對象參與。

內部調用要用self/static::$...

外部調用,類名::

用處就是所有的對象共用的數據。

--如果內部調用時,變量在父類中

比如說,在上述例子中,父類human中寫這么一句話

public static $aaa="dafdfa";

 然后在子類nbaplayer中,調用父類的靜態成員時,要

echo parent::$aaa;

而外部調用,按照上面說的,類名::,所以,直接父類類名即可

echo Human::$aaa;

--其他

在靜態方法中,是無法訪問其他變量的,也就是說,不能用$this->

--小結

/**
 * 靜態成員
 * 1. 靜態屬性用于保存類的公有數據
 * 2. 靜態方法里面只能訪問靜態屬性
 * 3. 靜態成員不需要實例化對象就可以訪問
 * 4. 類內部,可以通過self或者static關鍵字訪問自身的靜態成員
 * 5. 可以通過parent關鍵字訪問父類的靜態成員
 * 6. 可以通過類名稱在外部訪問類的靜態成員
 */

4.4 Final成員

--問題

不希望某個類擁有子類;

不希望子類修改父類中的某個變量(避免重寫?)

--final

》=php5版本

舉個例子

class BaseClass{
 public function test(){
 echo "BaseClass::test called<br/>";
 }
public function test1(){
 echo "BaseClass::test1 called<br/>";
 }
}
class ChildClass extends BaseClass{
 public function test(){
 echo "ChildClass::test called<br/>";
 }
}
$obj=new ChildClass();
$obj->test();

 子類中編寫跟父類中完全一致的方法名(內容可以不同),會完成對父類方法的重寫!

所以,不希望被重寫的父類中的方法,寫上final

復制代碼 代碼如下:


final public function test(){

依此類推,對于不想有子類的父類,在類名那里寫上final

復制代碼 代碼如下:


final class BaseClass{

--小結

/**
 * 重寫和Final
 * 1. 子類中編寫跟父類完全一致的方法可以完成對父類方法的重寫
 * 2. 對于不想被任何類繼承的類可以在class之前添加final關鍵字
 * 3. 對于不想被子類重寫(overwrite, 修改)的方法,可以在方法定義前面添加final關鍵字
 */

4.5 數據訪問

先把final都去掉

--parent

然后再子類中的方法中寫

parent::test();

運行后會發現,依然可以通過parent的關鍵字調用父類中,即使是被重寫的數據

--self

然后在父類中的方法test中寫

self::test1();

運行后,發現self可以調用同一個類中的數據(其他方法/靜態變量/常量const)

--小結

/**
 * 數據訪問補充
 * 1. parent關鍵字可以用于調用父類被重寫的類成員
 * 2. self關鍵字可以用于訪問類自身的成員方法,也可以用于訪問自身的靜態成員和類常量;不能用于訪問類自身的屬性;訪問類常量時不用在常量名稱前面加$符號
 * 3. static關鍵字用于訪問類自身定義的靜態成員,訪問靜態屬性時需要在屬性名前面添加$符號
 */

4.6 對象接口

非常重要!!!

--問題

不同的類,有著相同的行為,但相同的行為又有著不同的實現方法。

比如人和動物都會吃東西,但吃的方式方法又不太一樣。

--定義

接口就是把不同類的共同行為進行了定義,然后在不同的類里面實現不同的功能。

--栗子 

復制代碼 代碼如下:


//定義一個接口
interface ICanEat{
 public function eat($food);
}

可以看到,接口中并沒有方法的具體實現,但必須有方法!

那么,下面是,“人類會吃”

//具體對象,連接到接口
class Human implements ICanEat{
public function eat($food){
 echo "Human eating ".$food.".<br/>";
 }
}
$obj=new Human();
$obj->eat("shit");

請忽略我給出的“食物”。

注意,不再用extends,而是implements。然后,同樣是方法名的完全相同。然后,對象必須/最好實現方法。

繼續

interface ICanEat{
 public function eat($food);
}
//具體對象,連接到接口
class Human implements ICanEat{
public function eat($food){
 echo "Human eating ".$food.".<br/>";
 }
}
class Animal implements ICanEat{
 public function eat($food){
 echo "Animal eating ".$food.".<br/>";
 }
}
$obj=new Human();
$obj->eat("shit");
$monkey=new Animal();
$monkey->eat("banana");

 讓動物也吃起來!

--逆向操作

判斷某個對象是否連接了某個接口。

復制代碼 代碼如下:


var_dump($obj instanceof ICanEat);

會返回boolean值。

--更多的栗子

interface ICanPee extends ICanEat{
 public function pee();
}
class Demon implements ICanPee{
 public function pee(){
 echo "Can demon pee?";
 }
 public function eat($food){
 echo "Can demon eat ".$food;
 }
}
$ghost=new Demon();
$ghost->pee();
$ghost->eat("shit");

 接口本質上也是類,可以被繼承/繼承,但是使用繼承接口的接口,所有父類、“爺類”的方法都要有具體實現。

感謝各位的閱讀!關于“PHP面向對象之對象的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

灵宝市| 芜湖县| 武乡县| 桑植县| 澄迈县| 关岭| 晴隆县| 荣昌县| 西乌珠穆沁旗| 南康市| 古浪县| 日照市| 屯门区| 牙克石市| 错那县| 阿图什市| 罗山县| 壤塘县| 阳泉市| 霍山县| 中方县| 邵阳县| 平果县| 惠州市| 松滋市| 开江县| 英山县| 阳信县| 涞源县| 墨竹工卡县| 江都市| 永和县| 武山县| 韶关市| 岢岚县| 桃江县| 兴海县| 桐柏县| 西乡县| 平阳县| 湘潭县|