亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言 百分網(wǎng)手機站

PHP面向?qū)ο蟮哪g(shù)方法詳解

時間:2020-09-07 18:13:15 php語言 我要投稿

PHP面向?qū)ο蟮哪g(shù)方法詳解

  PHP是一種通用開源腳本語言。本篇文章主要介紹了淺談PHP中的面向?qū)ο驩OP中的魔術(shù)方法 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下!

PHP面向?qū)ο蟮哪g(shù)方法詳解

  一、什么是魔術(shù)方法:

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

  例如:

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

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

  1.__construct():構(gòu)造函數(shù),new對象時自動調(diào)用

  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對象時會自動調(diào)用__construct()函數(shù),將傳入的參數(shù)分別賦給$name,$age。

  2.__destruct():析構(gòu)函數(shù),當(dāng)一個對象被銷毀前自動調(diào)用

  1

  2

  3

  4

  5

  6

  7

  8

  class Person{

  public $name;

  public $age;

  function __destruct(){

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

  }

  }

  同上所述,對象被銷毀時執(zhí)行此魔術(shù)方法

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

  1

  2

  3

  4

  5

  6

  7

  8

  class Person{

  private $name;

  public $age;

  function __get($name){

  return $this->$name;

  }

  }

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

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

  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";的方式直接設(shè)置,需要設(shè)置__set()方法,傳入的參數(shù)分別是屬性名和屬性值。

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

  1

  2

  3

  4

  5

  6

  7

  8

  class Person{

  private $name;

  public $age;

  function __isset($name){

  return isset($this->$name);

  }

  }

  使用isset檢測對象私有屬性時調(diào)用,其他同上。

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

  1

  2

  3

  4

  5

  6

  7

  8

  class Person{

  private $name;

  public $age;

  function __unset($name){

  unset($this->$name);

  }

  }

  同上,在用unset()函數(shù)刪除私有屬性時調(diào)用。

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

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  class Person{

  public $name;

  public $age;

  function __toString(){

  $str = <<<str

  您要打印的內(nèi)容是:<br>

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

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

  str;

  return $str;

  }

  }

  使用echo打印對象時調(diào)用,返回打印對象時想要顯示的內(nèi)容。

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

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  class Person{

  public $name;

  public $age;

  function __call($funcName,$funcParams){

  echo "您調(diào)用的函數(shù){$funcName},參數(shù)列表";

  print_r($funcParams);

  echo "不存在/未公開";

  }

  }

  $zhangsan=new Person();

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

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

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

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

  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;

  打印出的結(jié)果是"lisi",而不是"zhangsan"。

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

  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():對象反序列化時自動調(diào)用,為反序列化新產(chǎn)生的對象進(jìn)行初始化賦值

  1

  2

  3

  4

  5

  6

  7

  8

  class Person{

  public $name;

  public $age;

  function __wakeup(){

  $this -> name = "lisi";

  }

  }

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

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

  1

  2

  3

  4

  5

  6

  function __autoload($className){

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

  }

  $zhangsan=new Person();

  $zhangsan->say();

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

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


【PHP面向?qū)ο蟮哪g(shù)方法詳解】相關(guān)文章:

PHP語言面向?qū)ο蟮膬?nèi)容08-23

PHP常用魔術(shù)方法講解10-01

PHP中的16個魔術(shù)方法09-18

java面向?qū)ο缶幊痰姆椒ㄙY料12-06

PHP程序面向?qū)ο蠓治鲈O(shè)計的經(jīng)驗原則07-26

PHP編程:類和對象、方法調(diào)用09-12