PHP 魔術方法__set() __get() 方法


先看看官方文檔的解釋
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
究竟用中文怎么翻譯呢?   inaccessible :n. 難達到;難接近;無法理解。
有代碼有真相:

<?php
error_reporting(E_ALL);
class stu{
	private $a;
	private $b = 0;
	public $c;
	public $d = 0;
	
	//這里的 private 可以用 protected public 替代
	private function __get($name) {
		return 123;
	}
	
	//這里的 private 也可以用 protected public 替代
	private function __set($name, $value) {
		echo "This is set function";
	}
}

$s = new stu();

var_dump($s->a);  //output: 123
var_dump($s->b);  //output: 123
var_dump($s->c);  //output: null
var_dump($s->d);  //output: 0
var_dump($s->e);  //output: 123

$s->a = 3;	//output: This is set function
$s->c = 3;  //no output
$s->f = 3;  //output: This is set function
?>

 結果:
如果沒有__get方法,執行 var_dump($s->a)  var_dump($s->b) 會有致命的錯誤
如果沒有__get方法,執行 var_dump($s->e) 會有一個notice,提示沒有定義屬性 $e
總結:
1. 從一個難以訪問的屬性讀取數據的時候 __get() 方法被調用
2. 向一個難以訪問的屬性賦值的時候 __set() 方法被調用
3. 難以訪問包括:(1)私有屬性,(2)沒有初始化的屬性
4. __isset() __unset() 也類似

標簽: none


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM