PHP中面相對象對象的知識點整理,php面相對象知識點
面向對象
萬物皆對象,將構成問題的事務分解到各個對象上,建立對象的目的不是為了完成一個工作,而是為了描述某個事務在解決問題中的行為,更符合人的思維習慣,代碼重用性高,可擴展性.
__________________________________________________________________
類的概念
類
是一種抽象的概念,是具有相同語義定義對象的集合(具有相同屬性和方法的集體),使用具體的類是不可行的,只能實例化。拿汽車舉例,汽車的設計圖紙就是類,汽車是對象。設計中重點是類的創建
現實生活中類的概念
萬物皆為對象如我們使用的具體電腦就是對象,那電腦就是一個類。你去幼兒園接孩子,你說接孩子,人家一定不給你(除非認識你和知道你的孩子是誰),你要說出你孩子的名子,你的孩子就是具體的對象,孩子就是一個類
類名書寫規范
類名首字母大寫一個類定義在一個文件中,並以.class.php做為文件名結尾
__________________________________________________________________
對象
對象句柄
用於區分不同對象。對象創建後,在內存中獲取一塊存儲空間,儲存空間的地址就是對象的標識或句柄
屬性
在類中定義的變量,即為成員屬性,用於描述對象靜態特性的數據。如人的姓名,性別,首字母小寫
方法
函數定義在類中即為成員方法,用於描述對象動態特性的操作行為,方法名不區分大小寫,不可重名,首字母小寫
對象的生命周期
創建後,生命周期開始,當程序結束後或程序員清除對象後即銷毀,PHP會自動銷毀對象
對象的生命周期
1 程序執行完成後,PHP運行回收機制,刪除內存的對象
2 刪除所有
對象的引用後,對象即為垃圾,回收機制自動刪除垃圾
對象產生的步驟
1 在內容中開辟出對象的空間
2 執行構造方法
3 將對象的引用地址返回
對象的內存分布:
1 對象引用被放到了“棧內存”裡(棧存放固定內容)
2 對象是放在“堆內存”裡(堆存放可變內容)
3 而靜態成員則放到了“數據區”,在第一次被加載的時候放入的,可以讓堆內存裡面的每個對象所共享
4 函數和方法放在代碼區
面向對象的特性
抽象性
把一類對象的共有屬性和方法抽象出來,形成類,這種思考方式為抽象
封裝性:
把成員方法和成員屬性封裝到類中,隱藏屬性和方法,隱藏方法實現的細節,通過public protected private final static 限定類成員的訪問權限,數據被保護在內部,只有通過被授權的成員方法才可以操作。盡可能的對成員進行封裝
繼承extends:
可以使一個類繼承並擁有另一個已經存在類的成員屬性和方法,被繼承的類稱為父類或基類,繼承類為子類。extends 關鍵字 實現繼承關系
多態:
子類繼承父類,通過對父類方法重寫實現多態
__________________________________________________________________________________________
訪問修飾符(作用域描述符)
publlic 公有
在類的內部與外部或子類都可以訪問,是最開放的權限
private 私有的
定義類的屬性和方法,在類的內部可以訪問,在類的外部或子類都不可以訪問
protected 受保護的
定義類的屬性和方法,在類的內部或子類可以訪問,類的外部不可以訪問
模塊設計
強內聚(功能盡量在類的內部完成),弱耦合(開放盡量少的方法給外部調用)。例:公司銷售接項目,具體工作交給公司內部程序員,設計人員,服務器管理人員協同完成
__________________________________________________________________________________________
static靜態屬性與靜態方法
需要一個數據對象只服務於類,即類內部可用,對外不可用時。建對象是極其耗費資源的,因此當一個方法具有比較強的公用性的時候,沒有必要為了調用這個方法而重新再生成該類的實例。定義的方法或變量在程序第一次加載時即駐留內存,程序結束釋放。
靜態方法不能被非靜態方法重寫,構造方法不允許聲明為static的
static變量:
通過static聲明的成員變量為靜態變量或叫類變量,是該類的公共變量,在第一次使用時即生成,對於該類的所有對象只有一份,是屬於類的,不是屬於對象的。static變量是屬於類而不屬於對象,可以在任何地方通地類來訪問,是類的全局變量,類創建時即存入內存。對多個對象來說,靜態數據成員只存儲一處,可以節省內存。只要對靜態數據成員的值更新一次,保證所有對象存取更新後的相同的值。
static方法:
用static聲明的方法為靜態方法或叫類方法,執行該方法時不會將對象引用傳給函數,所以我們不能訪問非靜態成員,只能訪問靜態方法或靜態變量。只能使用關於類的方式如self static parent等。使用時不用生成對象即可執行
$this self:: parent::
$this
是當前對象的引用, 一般出現在方法裡,用於獲取類的成員屬性,或執行類的成員方法
self ::
對本類的引用 ,用於獲取當前類的表態成員屬性或靜態成員方法self::run()
parent ::
對父類的引用,調用父類的方法或屬性。
_________________________________________________________________________________
構造方法&析構方法
構造方法__construct()
在創建對象時自動執行,沒有返回值,用於執行類的一些初始化工作,如對象屬性的初始化工作,PHP4中構造方法必須與類同名,php5中規定構造方法為__construct(),優點是不受類名的影響,如果不存在__construct php搜索與類同名的方法自動執行。
可以在構造方法中傳遞參數,用於定義屬性,在父類和子類都定義構造方法時,執行子類的構造方法
析構方法__destruct():
用於對象在內存中被銷毀時自動執行的方法,不帶任何參數
_________________________________________________________________________________
對象 final const
//類裡面的方法不能修改
//類不能被繼承
final class souji {
final public $pinpai; //報錯
final function congdian() { //無效
echo $this->pinpai . "手機通過10v電壓來充電";
}
public function kaijidonghua() {
echo "<<< 沒有開機動畫 >>>>";
}
}
class moto extends souji {
public function __construct() {
// $this->pinpai = "摩托羅拉";
$this->congdian();
}
public function kaijidonghua() {
echo "摩托羅拉商標";
}
}
$li = new moto();
$li->kaijidonghua();
//定義常量
define("WEBNAME", "文豆");
function aa(){
echo WEBNAME."專注PHPWEB開發";
}
aa();
class caiwu{
const suilv=0.05;
function __construct(){
echo WEBNAME;
}
function kaigonzi($xingming,$gongzi){
$gongzi = $gongzi-$gongzi*self::suilv;
return $xingming."的工資是:".$gongzi."元";
}
}
/*員工類*/
class yuangong{
private $xingming;//姓名
private $gongzisu;//工資數
function __construct($xingming,$gongzisu){
$this->xingming = $xingming;
$this->gongzisu = $gongzisu;
}
function kaizi(){
$caiwu = new caiwu();
return $caiwu->kaigonzi($this->xingming, $this->gongzisu);
}
}
$lisi = new yuangong("李四", "6000");
echo $lisi->kaizi();