標籤:span 函數返回 就會 完全 http use xtend 私人屬性 sse
1. 聲明變數不需要任何關鍵字修飾,但在類中聲明成員屬性時,變數前一定要有關鍵字,
例如public ,private ,static等,如果不需要一定的意義,則用“var ” ,
一旦有其他關鍵字修飾就需要去掉“var”
2. this
訪問對象中的成員必須通過對象的引用,如
$person1 -> name ;
$person1 -> run();
用$this 訪問對象內部的函數和屬性
3.構造方法
每建立一個對象,構造方法就會自動調用一次。"__construct ( ) " ,如果沒有,則搜尋與類同名的構造方法
function __construct ( [ parameters ] ) {
}
作用:即使類聲明沒有參數 ,也可在建構函式中設定。
4. 對象被銷毀前自動運行
function _destruct ( parameter ) {
}
5.私人成員
關鍵字:private
加上後不能在對象外部存取該變數,如需訪問,需要設定公有函數介面,如果不聲明,預設就是public
private $name;
public get_name ( ){ return $this->name ;}
6. __set() , __get() , __isset() , __unset()
和__construct() , __destruct()同類的魔術方法,
如__set() ,用於設定private 屬性值時自動調用的方法。
6.1
__set ( $propertyName , $propertyValue ) {} ,設定了魔術方法__set ()後,就可以直接為私人屬性賦值了,自動調用__set() 方法
6.2
__get( $propertyName){}
可擷取私人屬性,並設定條件,運行$person->name 時自動調用。設定條件:
if ( $propertyName == "sex" ) return "保密";
6.3
__isset( $propertyName ) , __unset ( $propertyName )
設定特殊情況,不允許訪問屬性。
設定特殊情況,不允許刪除屬性。
7-10.5繼承性
1.訪問類型控制
2.子類重載父類的方法
用parent:: functionName () 來調用被覆蓋父類方法。
8:10.6一些關鍵字
1. final 關鍵字
-使用final標識的類,不能被繼承
-在類中使用final標識的成員方法,在子類中不能被覆蓋
2. static 關鍵字
聲明靜態成員屬性,則屬性是屬於所有類的,
static $count ;
在類內:使用 self:: $count 來使用
在類外:使用 類名::$count 來使用
靜態方法只能訪問靜態變數,因為在類載入完成後,靜態方法就可以訪問了,而此時對象不一定存在,非靜態成員也就不一定存在,
this關鍵字不可使用,而且即使對象建立了,靜態方法也不知道訪問哪一個對象的成員變數。
9: 10.6.3 單態設計模式
只能建立一個對象的類,
1. 聲明__construct () 為private,把預設的建立方法new禁止,
2. 建立一個靜態成員來判斷類是否已經建立過對象,
//只能使用靜態方法getInstance()來擷取DB的對象
10.6.4 const關鍵字
用與將類中的成員變數定義為常量,與static變數一樣,
通過類名或在成員方法中使用self關鍵字訪問
10.6.5 instanceof 關鍵字
確定一個對象是類的執行個體、類的子類,還是實現了某個介面
10.6.6 複製對象
有時需要建立對象的一個副本,改變原來的對象不影響副本,
用new重新建立對象再重新賦值,比較麻煩,可以用clone關鍵字複製出完全相同的執行個體,
不再需要重新賦值
10.6.7 __toString () 快速擷取對象的某些字串
$p = new Person () 是一個對象的引用。直接用echo輸出$p會提示錯誤
如果在類中添加了__toString ()方法則可以直接返回某些字元。
function __toString () { return $this-> foo ; }
10.6.8 __call() 方法的引用
如果嘗試調用對象中不存在的方法,會出現系統報錯。可以添加一個__call()方法,
調用不存在的方法時就會自動調用該方法,程式繼續執行。
10.6.9 自動載入類
使用全域類__autoload() ,當嘗試使用一個沒有添加的類時,php自動調用該方法,
添加參數名檔案,
function __autoload ( $className ){
include ( strtolower ( $className ) . ".class.php" ) ;
}
$obj = new user () ; // user類不存在則自動調用__autoload() 函數,將類名user作為參數傳入。
10.6.10
對象序列化
1.
對象的壽命通常隨著產生該對象的程式的終止而終止,有時需要將對象的狀態儲存下來,
儲存為二進位字元,需要時再恢複。
$person_string = serialize ( $person );
file_put_contents ( "file.txt" , $person_string ) ;
---
$person_string = file_get_contents ( " file.txt " ) ;
$person = unserialize ( $person_string ) ;
$person -> say ();
2.__sleep() 、wakeup() 函數
序列化與恢複時自動調用的兩個函數。
_sleep () 函數返回一個數組,包含需要序列化的成員,沒有包含的成員在序列化時會被忽略
function __sleep (){
$arr = array ( "name","age" );
return $arr;
}
function __wakeup () {
$this -> age = 40 ;
}
沒有參數也沒有返回,在重新喚醒時,為新對象的$age 重新賦值。
10.7.1 抽象類別
只要聲明類時有一個方法是抽象方法,那麼這個類就是抽象類別。抽象類別也要使用abstract關鍵字修飾
abstract class person {
abstract function say();
}
抽象類別不能執行個體化,用於繼承,子類繼承抽象類別後,就必須將所有抽象方法實現,
否則子類還是抽象類別。
10.7.2 介面。
解決單繼承問題。 介面是一種特殊的抽象類別:介面中聲明的方法全是抽象方法。
而且不能在介面中聲明變數,只能使用const 聲明常量。
介面使用interface標識。
通過類繼承介面時需要使用implements 關鍵字實現,而不是extends,
如果使用抽象類別實現介面中的部分方法,也需要使用implements關鍵字。
可以用抽象類別實現介面的部分方法,但要執行個體化,還需要抽象類別有子類把他的所有抽象方法實現。
可以繼承多個介面,但必須把所有抽象方法全部實現才能建立執行個體,可以同時繼承一個父類
class 類名 extends 父類 implements 介面1,介面2 ,...,{
//實現所有方法
}
10.7.3 實現多態
定義一個usb介面,每個usb裝置都必須有這個方法
interface usb {
function run ();
}
class ukey implements usb {
function run {
echo "ukey run";
}
}
class umouse implements usb {
function run {
echo "umouse run";
}
}
class Computer {
function useUsb ( $ device ){
$device->run();
}
}
$computer = new Computer ;
computer->useUsb( new usbkey() );
computer->useUsb( new umouse() );
6.7-1php類相關