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