6.7-1php類相關

來源:互聯網
上載者:User

標籤: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類相關

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.