-
面向?qū)ο蟥C–實例解析查看全部
-
面向?qū)ο蟥C–實質(zhì)查看全部
-
為什么要使用面向?qū)ο螅?查看全部
-
什么是面向?qū)ο螅?查看全部
-
對象的特點查看全部
-
對象的基本組成查看全部
-
什么是對象?查看全部
-
public function __get($name){ return "Getting the property: ".$name; } public function __set($name,$value){ echo "Setting the property:".$name." to value:".$value."\n"; } $obj=new MagicTest(); echo $obj->className."\n"; $obj->className = "MagicClassX";查看全部
-
/* 在給不可訪問屬性'賦值'時,__set()會被調(diào)用。 '讀取'不可訪問屬性的值時,__get()會被調(diào)用。 當對不可訪問屬性調(diào)用'isset()'或'empty()'時,__isset()會被調(diào)用。 當對不可訪問屬性調(diào)用'unset()'時,__unset會被的調(diào)用。 */查看全部
-
<?php class MagicTest{ //__tostring 會在把對象轉(zhuǎn)換為string的時候自動調(diào)用 public function __tostring(){ return "This is the Class MagicTest.\n"; } //__invoke 會在把對象當作一個方法調(diào)用的時候自動調(diào)用 public function __invoke($x){ echo "__invoke called with parameter ".$x."\n"; } //方法的重載 (overload) //第一個參數(shù)是調(diào)用方法的名稱;第二個參數(shù)是方法調(diào)用的參數(shù)組成的數(shù)組。 public function __call($name,$arguments){ //implode:分割數(shù)組 echo "Calling ".$name." with parameters: ".implode(",",$arguments)."\n"; } //靜態(tài)方法的重載,注意這個方法需要設定為static public static function __callStatic($name,$arguments){ echo "Static Calling".$name." with parameters: ".implode(",",$arguments)."\n"; } } $obj=new MagicTest(); //echo $obj; //echo $obj(5); $obj->runTest("para1","para2"); MagicTest::runTest("para1","para2"); ?>查看全部
-
<?php class MagicTest{ //__tostring 會在把對象轉(zhuǎn)換為string的時候自動調(diào)用 public function __tostring(){ return "This is the Class MagicTest.\n"; } //__invoke 會在把對象當作一個方法調(diào)用的時候自動調(diào)用 public function __invoke($x){ echo "__invoke called with parameter ".$x."\n"; } } $obj=new MagicTest(); echo $obj; echo $obj(5); ?>查看全部
-
<?php //abstract關鍵字用于定于抽象類 abstract class ACanEat{ //在抽象方法前面添加abstrac關鍵字可以標明這個方法時抽象方法而不需要具體實現(xiàn) abstract public function eat($food); //抽象類中可以包含普通的方法,有方法的具體實現(xiàn) public function breath(){ echo "Breath use the air. \n"; } } //繼承抽象類的關鍵字是extends class Human extends ACanEat{ //繼承抽象類的子類需要實現(xiàn)抽象類中定義的抽象方法 public function eat($food){ echo "Human eating ".$food."\n"; } } class Animal extends ACanEat{ public function eat($food){ echo "Animal eating ".$food."\n"; } } $man=new Human(); $man->eat('Apple'); $man->breath();//和animal類共有了抽象類中breath方法 $monkey=new Animal(); $monkey->eat('Banana'); $monkey->breath(); ?>查看全部
-
$obj=new Human(); $obj->eat('Apple'); $monkey=new Animal(); $monkey->eat('Banana'); //相同的一行代碼,對于傳入不同的接口的實現(xiàn)的對象的時候,表現(xiàn)是不同的。這就是多態(tài)。 checkEat($obj); checkEat($monkey);查看全部
-
//不能實例化接口 //instanceof(1)判斷一個對象是否是某個類的實例 //instanceof(2)判斷一個對象是否實現(xiàn)了某個接口 var_dump($obj instanceof ICanEat); function checkEat($obj){ if($obj instanceof ICanEat){ $obj->eat('food'); }else{ echo "The obj can't eat.\n"; } } checkEat($obj); checkEat($monkey); //可以用extends讓接口繼承接口 interface ICanPee extends ICanEat{ public function pee(); } //當類實現(xiàn)子接口時,父接口定義的方法也需要在這個類里實現(xiàn) class Human1 implements ICanPee{ public function eat($food){} public function pee(){} }查看全部
-
<?php //interface關鍵字用于定義接口 interface ICanEat{ //接口里面的方法不需要有方法的實現(xiàn) public function eat($food); } // implements關鍵字用于表示類實現(xiàn)某個接口 class Human implements ICanEat{ //實現(xiàn)了某個接口之后,必須提供接口中定義的方法的具體實現(xiàn)。 public function eat($food){ echo "Human eating ".$food."\n"; } } $obj=new Human(); $obj->eat('Apple'); ?>查看全部
舉報
0/150
提交
取消