程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP類對象中__get()和__set()方法使用教程

PHP類對象中__get()和__set()方法使用教程

編輯:PHP綜合
  問1:
  class Test{
  private $aa=1;
  function __get($proName){return $this->proName;}
  }
  class subTest extends Test{
  private $aa=2;
  }
  $test=new subTest();
  echo $test->aa;
  求解釋,為啥輸出1?
  答:當試圖從類的外部訪問私有屬性時,__get方法會被調用,如果它存在的話subTest繼承了Test類,並試圖重載aa,但是沒有__get()方法,當實例化subTest類後訪問它的私有屬性,由於__get()方法,所以默認將調用父類的__get方法,當然訪問的也是父類的aa屬性,如果要輸出2可以為subTest類添加__get()
  追問:那繼承父類的方法能不能訪問子類的成員屬性
  class Test{
  protected $aa=1; function __get($proName){return $this->$proName;}
  }
  class subTest extends Test{
  protected $aa=2;
  }
  $test=new subTest();
  echo $test->aa;
  答:這裡輸出2,因為子類覆蓋了從父類繼承來的屬性aa,因為他們都是protected的,所以可以覆蓋
  追問:
  class Test{
  private $aa=1;
  function __get($proName){
  return $this->$proName;
  }
  class subTest extends Test{
  protected $aa=2;
  }
  $test=new subTest();
  echo $test->aa;
  答:這次輸出1,是因為子類並沒有覆蓋父類的屬性而且沒有自己的__get方法,當訪問同一個屬性時,php默認將其識別為private,也就是以父類的訪問限定符為標准,識別private後就會調用__get()方法,所以輸出1
  對應的__set()是設置屬性的值,原理相似。 *
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved