PHP物件導向的基礎

2021-06-01 21:04:31 字數 4965 閱讀 4921

1 使用extends實現繼承以及過載、魔術方法的含義

class b extends a

宣告的時候b裡可以沒有a裡的方法

呼叫的時候$b=new b();

$b->a裡的方法();

$b->a裡的屬性=1;

$b->b裡的方法();

$b->b裡的方法();

如果$a=new a();

可以$a->a裡的方法();

$a->a裡的屬性=1;

不可以$a->b裡的方法();

$a->b裡的方法();

過載:b繼承a ,b裡實現和a同名的方法屬性。

php中的"過載"與其它絕大多數物件導向語言不同。傳統的"過載"是用於提供多個同名的 類方法,但各方法的引數型別和個數不同。

魔術方法:php把所有以__(兩個下劃線)開頭的類方法當成魔術方法。所以你定義自己的類方法時,不要以 __為字首。

2 繼承用private和protected訪問修飾符可見性

屬性方法private不可以被繼承

屬性方法protected類外部不可見,可以被繼承

屬性方法public 所定義的類成員可以在任何地方被訪問

3 php中雙冒號::的應用

php類**中常看到"::"的操作符,這個是作用域限定操作符,是用乙個雙冒號"::"表示,它用來置頂類中不同作用域的級別。左邊是作用域右邊是訪問作用域的成員。

在php中定義的作用域有self和parent兩種(在php6中提供了static作用域)。

範圍解析操作符(也可稱作 paamayim nekudotayim)或者更簡單地說是一對冒號,可以用於訪問靜態成員、方法和常量,還可以用於子類覆蓋父類中的成員和方法。

class 

myclass 

echo 

myclass

::const_value;

class 

otherclass 

extends 

myclass

}otherclass

::doublecolon

();

//子類覆蓋父類

class 

myclass

}class 

otherclass 

extends 

myclass

}$class 

= new 

otherclass

();$class

->

myfunc

();

4 php中this和self以及parent的作用

this:就是指向當前物件例項的指標,不指向任何其他物件或類。

self:表示當前類的作用域,與this不同的是它不表示類的某個特定例項,在類之外的**中不能使用self,而且它不能識別自己在繼承中層次的位置。也就是說,當在擴充套件類中使用self時,它呼叫的不是父類的方法,而是擴充套件類的過載的方法。self是指向類本身,也就是self是不指向任何已經例項化的物件,一般self使用來指向類中的靜態變數。

private static $firstcount = 0;

private $lastcount;

//建構函式

function __construct()

parent:表示當前類父類的作用域,其餘的跟self特性一樣。parent是指向父類的指標,一般我們使用parent來呼叫父類的建構函式。

//繼承類的建構函式

function __construct( $person***, $personage )

5 建構函式與析構函式

具有建構函式的類會在每次建立物件時先呼叫此方法,所以非常適合在使用物件之前做一些初始化工作。

function __construct

() {}

如果子類中定義了建構函式則不會暗中呼叫其父類的建構函式。要執行父類的建構函式,需要在子類的建構函式中呼叫 parent::__construct()

。php 5 引入了析構函式的概念,這類似於其它物件導向的語言,如 c++。析構函式會在到某個物件的所有引用都被刪除或者當物件被顯式銷毀時執行。

function __destruct

() {}

6 final 關鍵字

php 5 新增了乙個 final 關鍵字。如果父類中的方法被宣告為final,則子類無法覆蓋該方法; 如果乙個類被宣告為final,則不能被繼承。

7 繼承和建構函式 父類

子類結果

有建構函式

無建構函式

父構造有建構函式

有建構函式

子構造

8 介面

可以通過inte***ce來定義乙個介面,就像定義乙個標準的類一樣。

注意:

1)但其中定義所有的方法都是空的;

2)介面中定義的所有方法都必須是public,這是介面的特性;

3)實現多個介面時,介面中的方法不能有重名;

4)介面也可以繼承,通過使用extends

操作符;

5)介面中也可以定義常量。介面常量和類常量的使用完全相同。 它們都是定值,不能被子類或子介面修改。

// 宣告乙個'itemplate'介面

inte***ce 

itemplate

// 實現介面

// 下面的寫法是正確的

class 

template 

implements 

itemplate

public function 

gethtml

($template)'

, $value

, $template);}

return 

$template;}

}9 屬性

類的變數成員叫做「屬性」,屬性宣告是由關鍵字public或者protected或者private開頭,然後跟乙個變數來組成。 屬性中的變數可以初始化,但是初始化的值必須是常數,這裡的常數是指php指令碼在編譯階段時就為常數,而不是在編譯階段之後在執行階段運算出的常數。

在php5 中,預定義了兩個函式「__get()」和「__set()」來獲 

取和賦值其屬性,以及檢查屬性的「__isset()」和刪除屬性的方法「__unset()」。

簡單的說乙個是取值,乙個是賦值。,「__set()」和「__get()」這兩個方法,這兩個方法不是預設存在的,而是我們手工新增到類裡面去的,像構造方法(__construct())一樣, 類裡面新增了才會存在,可以按下面的方式來新增這兩個方法,當然也可以按個人的風格來新增://__get()方法用來獲取私有屬性

view plain

copy to clipboard

<?php   

class

person

else

}   

}   

//__set()方法用來設定私有屬性  

private

function

__set(

$property_name

, $value

)   

//__isset()方法  

private

function

__isset(

$nm)   

//__unset()方法  

private

function

__unset(

$nm)   

}   

$p1=

newperson();   

$p1->name=

"this is a person name"

;   

//在使用isset()函式測定私有成員時,自動呼叫__isset()方法幫我們完成,返回結果為true 

echo

var_dump(isset(

$p1->name)).""

;   

echo

$p1->name.""

;   

//在使用unset()函式刪除私有成員時,自動呼叫__unset()方法幫我們完成,刪除name私有屬性 

unset(

$p1->name);   

//已經被刪除了, 所這行不會有輸出  

echo

$p1->name;   

?>   

view plain

<?php 

class

personelse

} } 

//__set()方法用來設定私有屬性 private function __set($property_name, $value) //__isset()方法 private function __isset($nm) //__unset()方法 private function

__unset($nm

) } 

$p1=

newperson(); 

$p1->name=

"this is a person name"

; //在使用isset()函式測定私有成員時,自動呼叫__isset()方法幫我們完成,返回結果為true echo var_dump(isset($p1->name))."

"; echo $p1->name."

"; //在使用unset()函式刪除私有成員時,自動呼叫__unset()方法幫我們完成,刪除name私有屬性

unset($p1

->name); 

//已經被刪除了, 所這行不會有輸出 echo $p1->name; ?> 

10 轉殖

物件複製可以通過clone關鍵字來完成(如果物件中存在__clone()方法,會先被呼叫)。物件中的 __clone()方法不能直接呼叫。

當物件被複製後,php5會對物件的所有屬性執行乙個「淺複製」(shallow copy)。所有的屬性中的引用 仍然不變,指向原來的變數。如果定義了__clone()方法,則新建立的物件(複製生成的物件)中的__clone()方法會被呼叫, 可用於修改屬性的值(如果有必要的話)。

PHP物件導向基礎

1 constract 建構函式知識點 a 例項化物件的時候,如果子類沒有建構函式,就呼叫父類的建構函式。如果子類有建構函式,這首先呼叫自己。b 呼叫父類的建構函式 parent constract 2 php不支援多重繼承,因為多重繼承容易產生二義性。但如果讓c b a,就可以實現多重繼承的功能。...

php基礎 物件導向

物件導向的申明方式 物件class one b newone b aa 建構函式建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。php 5 允行開發者在乙個類中定義乙個方法作為建構函式,語法格式如下 class sit...

php基礎 物件導向

物件導向和面向過程的區別 優缺點 類 具有相同特性和行為的物件的抽象就是類。因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件,類實際上就是一種資料型別。在物件導向的程式語言中,類 是乙個獨立的程式單位,它應該有乙個類名幷包括 屬性 說明和 方法 說明兩個主要部分。類的成員 類的成員主...