標籤:
物件導向萬物皆對象,將構成問題的事務分解到各個對象上,建立對象的目的不是為了完成一個工作,而是為了描述某個事務在解決問題中的行為,更符合人的思維習慣,代碼重用性高,可擴充性.__________________________________________________________________類的概念類是一種抽象的概念,是具有相同語義定義對象的集合(具有相同屬性和方法的集體),使用具體的類是不可行的,只能執行個體化。拿汽車舉例,汽車的設計圖紙就是類,汽車是對象。設計中重點是類的建立 現實生活中類的概念萬物皆為對象如我們使用的具體電腦就是對象,那電腦就是一個類。你去幼兒園接孩子,你說接孩子,人家一定不給你(除非認識你和知道你的孩子是誰),你要說出你孩子的名子,你的孩子就是具體的對象,孩子就是一個類 類名書寫規範 類名首字母大寫一個類定義在一個檔案中,並以.class.php做為檔案名稱結尾 __________________________________________________________________ 對象物件控點用於區分不同對象。對象建立後,在記憶體中擷取一Block Storage空間,儲存空間的地址就是對象的標識或控制代碼 屬性在類中定義的變數,即為成員屬性,用於描述對象靜態特性的資料。如人的姓名,性別,首字母小寫 方法函數定義在類中即為成員方法,用於描述對象動態特性的操作行為,方法名不區分大小寫,不可重名,首字母小寫對象的生命週期建立後,生命週期開始,當程式結束後或程式員清除對象後即銷毀,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();
PHP中面相對象對象的知識點整理