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