<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            PHP面向對象的魔術方法詳解

            時間:2024-12-24 12:06:11 php語言 我要投稿
            • 相關推薦

            PHP面向對象的魔術方法詳解

              PHP是一種通用開源腳本語言。本篇文章主要介紹了淺談PHP中的面向對象OOP中的魔術方法 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下!

            PHP面向對象的魔術方法詳解

              一、什么是魔術方法:

              PHP為我們提供了一系列用__開頭的函數,這些函數無需自己手動調用,會在合適的時機自動調用,這類函數稱為魔術函數。

              例如:

              function __construct(){} 在new一個新對象時自動調用此函數

              二、PHP中都有那些魔術方法,以及它們的作用:

              1.__construct():構造函數,new對象時自動調用

              eg:

              1

              2

              3

              4

              5

              6

              7

              8

              9

              class Person{

              public $name;

              public $age;

              function __construct($name,$age){

              $this->name=$name;

              $this->age=$age;

              }

              }

              在new新的Person對象時會自動調用__construct()函數,將傳入的參數分別賦給$name,$age。

              2.__destruct():析構函數,當一個對象被銷毀前自動調用

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              public $name;

              public $age;

              function __destruct(){

              echo "這個對象被銷毀了";

              }

              }

              同上所述,對象被銷毀時執行此魔術方法

              3.__get():訪問類中私有屬性時自動調用,傳遞讀取屬性名,返回$this->屬性名

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              private $name;

              public $age;

              function __get($name){

              return $this->$name;

              }

              }

              如上代碼,$name被設為私有屬性后不能直接通過$this->name;的方式讀取,因此需要設置__get()魔術方法來讀取。

              4.__set():給類的私有屬性賦值時自動調用,傳遞需設置的屬性名,屬性值

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              private $name;

              public $age;

              function __set($key,$value){

              $this->$key=$value;

              }

              }

              同__get()方法,私有屬性不能通過$this->name="aaa";的方式直接設置,需要設置__set()方法,傳入的參數分別是屬性名和屬性值。

              5.__isset():使用isset檢測對象私有屬性時調用,傳遞檢測的屬性名,返回isset($this->屬性名)

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              private $name;

              public $age;

              function __isset($name){

              return isset($this->$name);

              }

              }

              使用isset檢測對象私有屬性時調用,其他同上。

              6.__unset():使用unset()函數刪除對象私有屬性時調用,傳遞刪除的屬性名,方法中執行unset($this->屬性名)

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              private $name;

              public $age;

              function __unset($name){

              unset($this->$name);

              }

              }

              同上,在用unset()函數刪除私有屬性時調用。

              7.__toString():使用echo打印對象時調用,返回打印對象時想要顯示的內容,返回必須是字符串

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              12

              13

              class Person{

              public $name;

              public $age;

              function __toString(){

              $str = <<<str

              您要打印的內容是:<br>

              $name=>{$this->name};<br>

              $age=>{$this->age};<br>

              str;

              return $str;

              }

              }

              使用echo打印對象時調用,返回打印對象時想要顯示的內容。

              8.__call():調用一個類中未定義的或未公開的方法時自動調用,傳遞被調用的函數名及參數列表

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              12

              class Person{

              public $name;

              public $age;

              function __call($funcName,$funcParams){

              echo "您調用的函數{$funcName},參數列表";

              print_r($funcParams);

              echo "不存在/未公開";

              }

              }

              $zhangsan=new Person();

              $zhangsan->say(1,2,3);

              如代碼所示,調用不存在的say(1,2,3);時,會打印

              您調用的函數way,參數列表Array ( [0] => 123 ) 不存在

              9.__clone():當使用clone關鍵字,克隆一個對象時自動調用,作用是為新克隆的對象初始化賦值

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              class Person{

              public $name;

              public $age;

              function __clone(){

              $this->name="lisi";

              }

              }

              $zhangsan=new Person("zhangsan",24);

              $lisi=clone $zhangsan;

              echo $lisi->name;

              打印出的結果是"lisi",而不是"zhangsan"。

              10.__sleep():對象序列化時自動調用,返回一個數組,數組中的值就是可以序列化的屬性

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              public $name;

              public $age;

              function __sleep(){

              return array("name","age");

              }

              }

              如上述代碼,在用serialize()序列化對象時只有"name","age"屬性會被序列化。

              11.__wakeup():對象反序列化時自動調用,為反序列化新產生的對象進行初始化賦值

              1

              2

              3

              4

              5

              6

              7

              8

              class Person{

              public $name;

              public $age;

              function __wakeup(){

              $this -> name = "lisi";

              }

              }

              將對象序列化后再反序列化,同時給對象的name屬性賦初值為"lisi"。

              12.__autolode():需要在類外部聲明函數,當實例化一個未聲明的類時自動調用,傳遞實例化的類名,可以使用類名自動加載對應的類文件。

              1

              2

              3

              4

              5

              6

              function __autoload($className){

              include "class/".strtolower($className).".class.php";

              }

              $zhangsan=new Person();

              $zhangsan->say();

              如上述代碼,Person類不存在時調用__autolode()方法,載入寫在文件外的類,"class/".strtolower($className).".class.php";就是類文件的相對路徑,$className就是

              不在本文件中的類的類名,因此在創建外部類文件時命名方式必須是小寫的類名.class.php。__autolode()方法也是惟一一個不用寫在類中的魔術方法。


            【PHP面向對象的魔術方法詳解】相關文章:

            PHP中的魔術方法詳解08-14

            PHP語言:面向對象09-24

            PHP5中的魔術方法詳解09-11

            PHP面向對象的進階學習09-06

            PHP語言面向對象的內容06-22

            php語言中的面向對象07-28

            PHP中八個魔術方法詳解09-23

            PHP面向對象編程之深入理解方法11-18

            php面向對象的程序設計10-12

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院