-
在實例化一個對象的時候,通常需要初始化。 對象被銷毀的時候,需要有回收。所以就用到了類里面的兩個內置的方法:構造方法和析構方法。
構造方法:
<?php class?Computer{ ????public?function?__construct()???//內置的構造方法,不用調用直接就會執行 ????{ ????????echo?"cpu就緒。。"; ????????echo?"主板就緒。。"; ????????echo?"內存就緒。。"; ?????} ?????public?function?game() ?????{ ?????????echo?"---玩游戲---"; ??????} } $computer?=?new?Computer(); $computer->game();??//結果為:cpu就緒。。主板就緒。。內存就緒。。---玩游戲---
<?php class?Computer{ ????public?function?__construct($high?=?0)??? ????{ ????????if($high){ ????????????echo?"高配的cpu就緒。。"; ????????????echo?"高配的主板就緒。。"; ????????????echo?"高配的內存就緒。。"; ?????????}else{ ????????????echo?"cpu就緒。。"; ????????????echo?"主板就緒。。"; ????????????echo?"內存就緒。。"; ?????????} ?????} ?????public?function?game() ?????{ ?????????echo?"---玩游戲---"; ??????} } $computer?=?new?Computer(1);???//?1這個參數就是構造方法的參數 $computer->game();??//結果為:高配的cpu就緒。。高配的主板就緒。。高配的內存就緒。。---玩游戲---
析構方法:
<?php class?Computer{ ????public?function?game() ????{ ????????echo?"---玩游戲---"; ?????} ?????public?function?__destruct()????//是析構方法,直接可執行 ?????{?? ??????????echo?"關閉電源。。。"; ??????} } $computer?=?new?Computer(); $computer->game();???//結果為:---玩游戲---關閉電源。。。 //還可以這樣?手動釋放對象變量 unset($computer); echo?"good?job";????//結果為:---玩游戲---關閉電源。。。good?job
類常量:
<?php class?Computer { ????const?YES?=?ture;?????//const關鍵字定義類常量,類常量一般是大寫字母和下劃線組成 ????const?NO?=?false; ????const?ONE?=?1; ???? ????const?TWO?=?self::ONE?+?1;????//在類里用self調用類里的常量 ????const?THREE?=?self::TWO?+?1; } var_dump(Computer::THREE);??//在類外面可直接調用類里的常量,結果為:int(3)
查看全部 -
調用靜態方法self:: 與static::的區別
selft代表自身;static可以實現后期綁定
查看全部 -
命名空間
例如:namespace venter;
???????? namespace venter\session
調用:命名空間(venter)\ 成員(Imooc())
將類,函數,常量導入命名空間
例如:
????use venter\session\Imooc();
? ? use venter\Imooc as Imooc2;
????use function venter\iLIkeImooc;
????use const venter\Imooc;
命名空間需要調用全局空間定義的類需要添加“\”;而方法或者常量不需要,因為方法或者常量發現在當前命名空間沒找到的話,會去全局命名空間找
查看全部 -
子類繼承父類,如果子類沒有構造方法,實例化子類的時候會調用父類的構造方法。如果子類中有構造方法,會調用自身子類的構造方法。如果子類中也想調用父類的構造方法,可以用parent調用
組合和繼承?
查看全部 -
類常量使用見截圖
查看全部 -
構造函數必須是public,否則不能創建對象。但是如果設置為private,就可以實現單例模式
查看全部 -
對象是類的實例,先有類,才有對象。就像配置單和電腦的關系。
類是一個代碼模板? ? ? ? ?
//定義一個類 <?php???????????//類名以字母或下劃線開頭,后面可跟字母、數字、下劃線。 class?Computer?{??????//類名一般開頭的字母大寫,為了清晰。當然也可以用小寫。 } $computer?=?new?Computer();??//這個對象賦給了這個變量,這個對象叫做Computer類的一個實例。 var_dump($computer);???//打印出:object(Computer)#1(0){}
? ? ? ? ? ? ? ? ??
<?php class?Computer?{????? ????public?$cpu?=?'amd?5000';?????//屬性????? ????public?$mainboard?=?'華碩9000x';??//屬性????? ????private?$hd?=?1024;?????????//屬性?? ???????????? ????public?function?game($gameName='')????//方法????? ????{???????????????? ???????echo?$this->hd;????//要在類里面調用屬性,就用this?可以理解為這個類的一個實例(對象)????? ?????}??????????????????//打印出:1024????? ?????public?function?job($work='寫代碼')???//方法????? ?????{??????????? ???????????echo?($this->game());????????? ??????} ?} ?$computer?=?new?Computer(); ?var_dump($computer);????//打印出所有的屬性:object(Computer)#1?(3)?{?["cpu"]=>?string(8)?"amd?5000"["mainboard"]=>?string(11)?"華碩9000x"?["hd":"Computer"?:private]=>int(1024)} ?var_dump($computer->cpu);???//調用屬性?打印出:string(8)"amd?5000" ?var_dump($computer->hd);??//是私有的,不能給外部對象調用??打印出錯??,只能在類的內部使用。 ??> ? ?<?php ?class?Computer?{ ????public?$cpu?=?'amd?5000';??????//屬性?? ????public?$mainboard?=?'華碩9000x';??//屬性????? ????private?$hd?=?512;?????????//屬性?????????? ????public?function?game($gameName='')????//方法????? ????{???????????????? ????????if($this->getHdSize()?<?1024){?????? ???????????echo?"硬盤太小玩不了游戲";?? ???????????return?false;?????????? ?????????}????????????? ?????????return?true;???????? ??????}?????????????? ??????public?function?job($work='寫代碼')???//方法????? ??????{?????? ??????????echo?($this->game());??//整個的結果就是打印出:硬盤太小玩不了游戲????? ???????}????? ???????public?function?getHdSize()???????//方法????? ???????{???????? ????????????return?$this->hd;???//獲取硬盤大小????? ????????} } $computer?=?new?Computer();
查看全部 -
面向對象編程 可使項目模塊化
重用性:設計的每一個模塊都可在項目中重復使用
靈活性:每一個模塊都可以很輕松地被替換
擴展性:在現有的模塊上添加新功能
? ? 面向對象:項目由一個個對象組建而成,每個對象都是獨立的,他們各司其職,最后像搭積木一樣,將各種組合起來,就實現了一個項目。
查看全部 -
類 的復用可直接用:use 類名
查看全部 -
對象復制是淺拷貝,會改變對象值,前面加clone,這不會改變原來值。
查看全部 -
class A {
? ? public static function who()
? ? {
? ? ? ? echo "A類的who方法";
? ? }
? ? public static function test()
? ? {
? ? ? ? ?self::who();//輸出A類的who方法
? ? ? ? ?static::who();//后期綁定輸出B類的who方法? ? }? ??
}
class B extends A {
? ? public static function who()
? ? {
? ? ? ? echo "B類的who方法";
? ? }
}查看全部 -
$this在當前方法使用
self指向當前類
parent指向父類
查看全部 -
<?php
class Person
{
? ? public ststic $hand = "手";
? ? public ststic function work()
? ? {
? ? ? ? return "工作";
? ? ?}
}echo (Person::$hand);
echo (Person::$work());//當屬性或方法定義為static后,輸出時就不需要實例化類了,直接調用
查看全部 -
1.
spl_autoload_register( function( $className ){
????require $className . '.php';
} )
2.
function autoload( $className ){
????require $className . '.php';
}
spl_autoload_register( 'autoload' )
3.方法是在類里面
class Momo{
????function autoload( $className ){
???????? require $className . '.php';
????}
}
spl_autoload_register( [new Momo, 'autoload' ] )// 第一個參數實例,第二個參數是類的方法
$imooc = new Imooc();
var_dump(#imooc);查看全部 -
命名空間一般對類起作用,方法會自動尋找類名。
查看全部
舉報