請寫出 php 類許可權控制修飾符答案:
public:公有型別
在類、子類、外部都可以訪問
protected:受保護型別
在類、子類可以訪問
private:私有型別
只要在子類可以訪問
本考點主要是考察php中類中的許可權控制修飾符,已經物件導向的特性、魔術方法、設計模式等考點
物件導向內容
繼承
繼承性是子類自動共享父類資料結構和方法的機制,這是類之間的一種關係。在定義和實現乙個類的時候,可以在乙個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。
在php中類是單一繼承,即乙個類只能繼承乙個父類。
方法重寫
子類在繼承了父類後,可以重寫父類的方法,即寫乙個與父類重名的方法將其覆蓋。final修飾的類方法不可被子類重寫。也可以使用parent::方法名()
來呼叫父類的方法。
<?php
/** * created by 冷月小白.
*/class
dog}
class
xiaohuang
extends
dog}
$xiaohuang
=new
xiaohuang()
;$xiaohuang
->
name()
;//輸出 "i am xiaohuang"
封裝
封裝是指將現實世界中存在的某個客體的屬性與行為繫結在一起,並放置在乙個邏輯單元內。
多型
多型性是指相同的函式或方法可作用於多種型別的物件上並獲得不同的結果。不同的物件,收到同一訊息可以產生不同的結果,這種現象稱為多型性。
抽象類的定義
任何乙個類,如果它裡面至少有乙個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的。
定義為抽象的類不能被例項化。
繼承乙個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更為寬鬆)。例如某個抽象方法被宣告為受保護的,那麼子類中實現的方法就應該宣告為受保護的或者公有的,而不能定義為私有的。
<?php
/** * created by 冷月小白.
*/abstract
class
abstractclass
}class
concreteclass1
extends
abstractclass
public
function
prefixvalue
($prefix
)concreteclass1";}
}class
concreteclass2
extends
abstractclass
public
function
prefixvalue
($prefix
)concreteclass2";}
}$class1
=new
concreteclass1
;$class1
->
printout()
;echo
$class1
->
prefixvalue
('foo_').
php_eol
;$class2
=new
concreteclass2
;$class2
->
printout()
;echo
$class2
->
prefixvalue
('foo_').
php_eol
;?>
介面的定義
使用介面(inte***ce),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。
介面是通過 inte***ce 關鍵字來定義的,就像定義乙個標準的類一樣,但其中定義所有的方法都是空的。
介面中定義的所有方法都必須是公有,這是介面的特性。
要實現乙個介面,使用 implements 操作符。類中必須實現介面中定義的所有方法,否則會報乙個致命錯誤。類可以實現多個介面,用逗號來分隔多個介面的名稱。
<?php
/** * created by 冷月小白.
*/// 宣告乙個'itemplate'介面
inte***ce
name
// 實現介面
class
myname
implements
name
public
function
getname
($name)}
$my=
newmyname()
;$my
->
setname
('a'
,'b');
echo
$my-
>
getname
('a');
//b
魔術方法
__construct() 函式
建構函式,在例項化類的時候自動執行
__destruct()函式
析構函式,析構函式會在到某個物件的所有引用都被刪除或者當物件被顯式銷毀時執行。
__call()函式
在物件中呼叫乙個不可訪問方法時,__call() 會被呼叫。
__callstatic()函式
在靜態上下文中呼叫乙個不可訪問方法時,__callstatic() 會被呼叫。
__get()
讀取不可訪問屬性的值時,__get() 會被呼叫。
__set()
在給不可訪問屬性賦值時,__set() 會被呼叫。
__isset()
當對不可訪問屬性呼叫 isset() 或 empty() 時,__isset() 會被呼叫。
__usset()
當對不可訪問屬性呼叫 unset() 時,__unset() 會被呼叫。
__sleep()
serialize() 函式會檢查類中是否存在乙個魔術方法 __sleep()。如果存在,則該方法會優先被呼叫,然後才執行序列化操作。
__wakeup()
unserialize()會檢查是否存在乙個__wakeup方法。如果存在,則會先呼叫 __wakeup方法,預先準備物件資料。
__tostring()
__tostring() 的具體用途是當乙個物件被當作字串對待的時候,會觸發這個魔術方法。
__clone()
當物件被clone時,會觸發這個方法
設計模式
工廠模式
單例模式
註冊樹模式
設配器模式
觀察者模式
策略模式
請寫出php的建構函式和析構函式答案
<?php
/** * created by 冷月小白.
*/class
apublic
function
__destruct()
//物件被銷毀時觸發
}
php面試筆記(1)-php基礎知識-變數和引用變數
php面試筆記(2)-php基礎知識-常量和資料型別
php面試筆記(3)-php基礎知識-運算子
php面試筆記(4)-php基礎知識-流程控制
php面試筆記(5)-php基礎知識-自定義函式及內部函式考點
php面試筆記(6)-php基礎知識-正規表示式考點
php面試筆記(7)-php基礎知識-檔案及目錄處理考點
php面試筆記(9)-php基礎知識-物件導向考點
如果這篇博文有幫助到您,可以幫冷月點乙個贊或者加乙個關注哦!
php面試筆記(3) php基礎知識 運算子
abc 和 abc 之間的區別。答案 php 支援乙個錯誤控制運算子 當將其放置在乙個 php 表示式之前,該表示式可能產生的任何錯誤資訊都被忽略掉。使用方法如下 created by 冷月小白.function abc abc 輸出 warning division by zero functio...
php面試筆記(4) php基礎知識 流程控制
請列出3種php陣列迴圈操作的語法,並註明各種迴圈的區別 答案 forforeach while list each for for迴圈是常見的迴圈結構,但是只能遍歷索引陣列。foreach foreach既可以遍歷索引陣列,也可以遍歷關聯陣列。但是每次呼叫foreach時陣列的內部指標會重置到陣列...
php面試筆記(4) php基礎知識 流程控制
回顧真題 請列出3種php陣列迴圈操作的語法,並註明各種迴圈的區別 答案 for for迴圈是常見的迴圈結構,但是只能遍歷索引陣列。foreach foreach既可以遍歷索引陣列,也可以遍歷關聯陣列。但是每次呼叫foreach時陣列的內部指標會重置到陣列中的第乙個元素。while list eac...