-
對(duì)象引用賦值
查看全部 -
對(duì)象的基本實(shí)踐
構(gòu)造函數(shù)function __construct
當(dāng)對(duì)象不會(huì)再被使用的時(shí)候會(huì)觸發(fā)析構(gòu)函數(shù)function __destruct
析構(gòu)函數(shù)一般用于清理程序使用的資源,比如一個(gè)程序用了打印機(jī)資源,可以在析構(gòu)函數(shù)釋放打印機(jī)資源‘
對(duì)象引用賦值
$obj = new cls();
$newobj1 = $obj
$newobj2 = &$obj
$obj 、$newobj1、$newobj2 都是對(duì)象的引用
$obj、$newobj1是對(duì)象的兩個(gè)獨(dú)立引用,如果其中一個(gè)引用改了對(duì)象的屬性,另一個(gè)引用的屬性都改了。如果一個(gè)引用設(shè)置成了null,則不會(huì)影響另外一個(gè)引用。
$newobj2是$obj的影子,使用對(duì)象的同一個(gè)引用,如果其中一個(gè)引用改了對(duì)象的屬性,另一個(gè)引用的屬性都改了,任何一個(gè)賦值為空相當(dāng)于刪除了同一個(gè)引用。查看全部 -
function __destruct(){} 析構(gòu)函數(shù),與構(gòu)造函數(shù)不同的是,構(gòu)造函數(shù)必須在new實(shí)例化對(duì)象的時(shí)候才會(huì)被調(diào)用
1.析構(gòu)函數(shù)是在所有程序運(yùn)行完結(jié)束才調(diào)用析構(gòu)函數(shù)的,而且是根據(jù)后入先出的原則,除非在執(zhí)行過程中觸發(fā)了析構(gòu)函數(shù),會(huì)立即調(diào)用析構(gòu)函數(shù)
2.把變量設(shè)置為空可以立即調(diào)用析構(gòu)函數(shù)
3.在實(shí)例化一個(gè)對(duì)象并且訪問成員屬性,再實(shí)例第二個(gè)對(duì)象,再繼續(xù)訪問成員屬性,這樣析構(gòu)函數(shù)也不會(huì)立即觸發(fā),直到程序執(zhí)行結(jié)束(就是到末尾啦)
4 當(dāng)一個(gè)類被實(shí)例化,不再引用時(shí)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)
析構(gòu)函數(shù)一般在程序結(jié)束后調(diào)用。如果想要提前調(diào)用,也就是說想要提前結(jié)束,那么就把對(duì)象變量設(shè)為null,同時(shí)如果存在其他引用指向這個(gè)對(duì)象的變量的話,都要將其變?yōu)閚ull,才算該對(duì)象不再調(diào)用,已經(jīng)結(jié)束。查看全部 -
構(gòu)造函數(shù):function __construct(){}
構(gòu)造函數(shù)在對(duì)象被實(shí)例化的時(shí)候自動(dòng)調(diào)用
$this是PHP中偽變量,表示對(duì)象本身查看全部 -
類的定義:
以關(guān)鍵字calss開始,后面跟著這個(gè)類的名稱。
類的命名通常每個(gè)單詞的第一個(gè)字母大寫。
以中括號(hào)開始和結(jié)束。
查看全部 -
3.2??? 類的實(shí)例化
類的示例化就是通過類定義創(chuàng)建一個(gè)類的對(duì)象
類的定義里面屬性值都是空的,而對(duì)象的屬性值都有具體的值查看全部 -
類的概念:
具有相同屬性和方法的對(duì)象的集合,類的屬性和方法,稱為類的成員,即類成員。它不涉及到具體的值
如果有具體的值的話,則是類的實(shí)例化。查看全部 -
2.7??? 面對(duì)對(duì)象的基本原則
對(duì)象內(nèi)部是高內(nèi)聚的
-??? 對(duì)象只負(fù)責(zé)一項(xiàng)特定的職能(職能可大可?。?br />
??????? -??? 所有對(duì)象相關(guān)的內(nèi)容都封裝到對(duì)象的
??? 2.對(duì)象對(duì)外是低耦合的
??????? -??? 外部世界可以看到對(duì)象的一些屬性(并非全部)
??????? -??? 外部世界可以看到對(duì)象可以做某些事情(并非全部)查看全部 -
面向?qū)ο蟮幕舅悸?br />
識(shí)別對(duì)象
- 任何實(shí)體都可以被識(shí)別為一個(gè)對(duì)象
識(shí)別對(duì)象的屬性
??????? - 對(duì)象里面存儲(chǔ)的數(shù)據(jù)被識(shí)別為屬性
??????? - 對(duì)于不同的業(yè)務(wù)邏輯,關(guān)注的數(shù)據(jù)不同,對(duì)象里面存儲(chǔ)的屬性也不同
??? 3. 識(shí)別對(duì)象的行為
??????? - 對(duì)象自己屬性數(shù)據(jù)的改變
??????? - 對(duì)象和外部交互
查看全部 -
面向?qū)ο?-實(shí)質(zhì)
面向?qū)ο缶褪前焉钪幸鉀Q的問題都用對(duì)象的方式進(jìn)行存儲(chǔ)
- 屬性
??????? - 方法
??? 2.對(duì)象與對(duì)象之間通過方式的調(diào)用完成互動(dòng)查看全部 -
面向?qū)ο缶幊痰幕靖拍?br />??? 什么是面向?qū)ο螅?br />??? 面向?qū)ο缶幊叹褪窃诰幊痰臅r(shí)候數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)組織方式)都通過對(duì)象的結(jié)構(gòu)進(jìn)行存儲(chǔ)
??????? - 屬性、方法
??????? (編程的時(shí)候把數(shù)據(jù)結(jié)構(gòu)都通過屬性、方法的形式組織起來
??? 為什么要使用面向?qū)ο螅?br />??? 對(duì)象的描述方式更貼合真實(shí)的世界,程序設(shè)計(jì)的過程中用對(duì)象的視角分析世界的時(shí)候能夠拉近程序設(shè)計(jì)和真實(shí)世界的距離。
查看全部 -
對(duì)象的特點(diǎn)
??? 1.每個(gè)對(duì)象都是獨(dú)一無二的(一個(gè)人)
??? 2.對(duì)象是特定事物,他的職能是完成特定的功能(學(xué)習(xí)、生活、工作等)
??? 3.對(duì)象是可以重復(fù)使用的 (學(xué)習(xí)完之后還可以繼續(xù)學(xué)習(xí))查看全部 -
對(duì)象的基本組成
對(duì)象包含兩部分
1.對(duì)象的組成元素
是對(duì)象的數(shù)據(jù)模型,用于描述對(duì)象的數(shù)據(jù)
又被稱為對(duì)象的屬性,或者對(duì)象的成員變量
2. 對(duì)象的行為
是對(duì)象的行為模型,用于描述對(duì)象能夠做什么事情,又被稱為對(duì)象的方法查看全部 -
面向?qū)ο?object oriented 抽象的也是對(duì)象。查看全部
-
<?php class?MagicTest{ ??public?$name; ??public?static?$arr=[]; ??//__tostring會(huì)在把對(duì)象轉(zhuǎn)換為string的時(shí)候自動(dòng)調(diào)用 ??public?function?__tostring(){ ??????return?"this?is?the?class?MagicTest"; ??} ??//__invoke會(huì)在把對(duì)象當(dāng)作一個(gè)方法的時(shí)候會(huì)自動(dòng)調(diào)用 ??public?function?__invoke($x){ ??????return?"__invoke?called?with?parameter".$x."\n"; ??} ??//方法重載 ??public?function?__call($name,$arguments){ ??????echo?"Calling?".$name."?width?parameters:?".implode(',',$arguments).""; ??} ???//靜態(tài)方法重載 ??public?static?function?__callStatic($name,$arguments){ ??????echo?"Static?calling?".$name."?width?parameters:?".implode(',',$arguments).""; ??} ??//-------屬性重載------ ??public?function?__get($name){ ??????return?$name; ??} ??public?function?__set($name,$value){ ??????self::$arr[$name]=$value;//如動(dòng)態(tài)設(shè)置 ??} ??public?function?__isset($name){ ??????echo?"__isset?invoked".$name."\n"; ??} ??public?function?__unset($name){ ??????echo?"unset?property".$name."\n"; ??} ??//-------------clone后實(shí)例前執(zhí)行------------------ ??public?function?__clone(){ ??????$this->name?=?"TBD"; ??} } $obj?=?new?MagicTest(); echo?$obj.'\n'; $obj(5); //方法重載 $obj->runTest("para1","para2");//Calling?runTest?width?para... MagicTest::runTest("para1","para2");//Static?calling?runTest?width?... //屬性重載 echo?$obj->className."\n"; $obj->className?=?"MagicClassX\n"; echo?isset($obj->className)?.'\n'; echo?empty($obj->className)?.'\n'; unset($obj->className); //復(fù)制對(duì)象實(shí)例 $obj2?=?clone?$obj;//會(huì)執(zhí)行__clone $obj2?->name?=?'obj2';//只改變了obj2,沒有改$obj ?>
查看全部 -
1、面向?qū)ο?-繼承 extends
子類擁有父類定義的類成員
子類可以修改或調(diào)整父類定義的類成員
在子類中,父類的屬性也可以通過$this訪問
extends后面只能跟一個(gè)類名,這就是php的單繼承原則,這就是php的單繼承原則
2、面向?qū)ο?-訪問控制
public公有的類成員,所有類可以訪問
protected受保護(hù)的類成員,自身和子類可以訪問
private 私有類,類成員只能在類內(nèi)部訪問
3、面向?qū)ο?靜態(tài)成員
1)靜態(tài)屬性定義時(shí)在訪問控制關(guān)鍵字后面添加static關(guān)鍵字即可
2)靜態(tài)屬性用于保存類的公有數(shù)據(jù)
3)靜態(tài)方法里面只能訪問靜態(tài)屬性
4)靜態(tài)成員不需要實(shí)例化對(duì)象就可以訪問
5)類的內(nèi)部可以通過seft::或者static::關(guān)鍵字訪問自身靜態(tài)成員
6)可以通過parent::關(guān)鍵字訪問父類靜態(tài)成員
7)可以通過類的名稱::在類定義外部訪問靜態(tài)成員
4、面向?qū)ο?-final成員
子類中編寫跟父類方法名完全一致的方法可以完成對(duì)父類方法的重寫overwrite
不想讓子類修改方法,在方法添加final關(guān)鍵字
final public function
不想讓子類繼承類,在類添加final關(guān)鍵字到final class
5、數(shù)據(jù)訪問
1)用parent關(guān)鍵字可以訪問父類被子類重寫的方法
2)self::可以訪問類自身成員方法,也可以用于訪問自身靜態(tài)成員和類常量;不餓能訪問類自身的屬性;使用常量的時(shí)候不需要在常量名稱前面添加$符號(hào)
3)static關(guān)鍵字用于訪問類自身定義的靜態(tài)成員,訪問靜態(tài)屬性時(shí)需要在屬性前面添加$符號(hào)
6、面向?qū)ο?-接口
1)interface關(guān)鍵字用于定義接口,里面的方法只需定義,不需要具體實(shí)現(xiàn)。
interface ICanEat{
}
2)implements 關(guān)鍵字用于便是類實(shí)現(xiàn)某個(gè)接口
3)實(shí)現(xiàn)了某個(gè)接口之后,必須提供接口中定義的方法的具體實(shí)現(xiàn)
4)不能實(shí)例化接口
5)可以用instanceof關(guān)鍵字來判斷某個(gè)對(duì)象是否實(shí)現(xiàn)了某個(gè)接口,實(shí)現(xiàn)了就可以用對(duì)象調(diào)用方法
6)可以用extends讓接口繼承接口,當(dāng)類實(shí)現(xiàn)子接口時(shí),父接口定義的方法也需要在這個(gè)類里面具體實(shí)現(xiàn)
7、面向?qū)ο?-多態(tài)
相同的一行代碼,對(duì)于傳入不同的接口的實(shí)現(xiàn)的對(duì)象的時(shí)候,表現(xiàn)是不同的,這就是多態(tài);這個(gè)很重要
function checkEat($obj){
????if($obj instanceof ICanEat){
????????$obj->eat('foo');
? ??}
}
8、面向?qū)ο?-抽象類
接口里面的方法是沒有實(shí)現(xiàn)的,而類里面的方法都是有實(shí)現(xiàn)的,那么抽象類就是可以包含沒有實(shí)現(xiàn)的方法,又有實(shí)現(xiàn)的方法。
//abstract關(guān)鍵字用于定義抽象類
abstract class ACanEat{
????//
????abstract?public function eat($food);//沒有實(shí)現(xiàn)
????public function breath(){//已實(shí)現(xiàn)
????????echo 'breath';
????}
}
//繼承抽象類的關(guān)鍵字是extends
class Human extends ACanEat{
????//繼承抽象類的子類需要實(shí)現(xiàn)抽象類中定義的抽象方法
????public function eat($food){
????????//實(shí)現(xiàn)
????}
}
Human可以用breath和eat方法
查看全部 -
對(duì)象的基本實(shí)踐
構(gòu)造函數(shù)function __construct
當(dāng)對(duì)象不會(huì)再被使用的時(shí)候會(huì)觸發(fā)析構(gòu)函數(shù)function __destruct
析構(gòu)函數(shù)一般用于清理程序使用的資源,比如一個(gè)程序用了打印機(jī)資源,可以在析構(gòu)函數(shù)釋放打印機(jī)資源‘
對(duì)象引用賦值
$obj = new cls();
$newobj1 = $obj
$newobj2 = &$obj
$obj 、$newobj1、$newobj2 都是對(duì)象的引用
$obj、$newobj1是對(duì)象的兩個(gè)獨(dú)立引用,如果其中一個(gè)引用改了對(duì)象的屬性,另一個(gè)引用的屬性都改了。如果一個(gè)引用設(shè)置成了null,則不會(huì)影響另外一個(gè)引用。
$newobj2是$obj的影子,使用對(duì)象的同一個(gè)引用,如果其中一個(gè)引用改了對(duì)象的屬性,另一個(gè)引用的屬性都改了,任何一個(gè)賦值為空相當(dāng)于刪除了同一個(gè)引用。
查看全部 -
對(duì)象引用賦值,什么時(shí)候調(diào)用析構(gòu)函數(shù)
查看全部 -
php的使用面向?qū)ο蟮闹匾?查看全部
-
。。。。。。。
查看全部 -
,,,,,,
查看全部 -
...............
查看全部 -
<?php//?類的定義以關(guān)鍵字class開始,后面跟類名,類名通常第一個(gè)字母大寫class?NbaPlayer{????public?$name="jordan";??//定義屬性????public?$height="198cm";????public?$team="bull";????public?function?run(){???//定義方法????????echo?"running";????}????public?function?shoot(){???????????echo?"shooting";????}???}//類到對(duì)象的實(shí)例化//類的實(shí)例化為對(duì)象時(shí)使用關(guān)鍵字new$jordan?=?new?NbaPlayer();echo?$jordan->name;$jordan->run();$jordan->shoot();?>
查看全部 -
類的定義屬性值是空的,而對(duì)象的屬性有具體值。
查看全部 -
。。。。。。。
查看全部
舉報(bào)