為什么我的__set魔術方法不起作用?
<?php
class?MagicTest{
????public?function?__tostring(){
????????return?"This?is?the?Class?MagicTest.?";
????}
????public?function?__invoke($x){
????????echo?"__invoke?called?with?parameter?".$x."\n";
????}
????//方法的重載
????//這個方法的參數第一個就是調用的方法的名稱,第二個參數是方法調用的參數組成的數組
????public?function?__call($name,$arguments){
????????echo?"Calling?"?.?$name?.?"with?parameters:?".
????????????implode(",",?$arguments)."\n";
????}
????//靜態方法的重載,注意這個方法需要設定為static
????public?static?function?__callStatic($name,$arguments){
????????echo?"Static?Calling?"?.?$name?.?"with?parameters:?".
????????????implode(",",?$arguments)."\n";
????}
????public?function?__get($name){
????????return?"Getting?the?property?".$name."\n";
????}
????public?function?__set($name,?$value){
????????return?"Setting?the?property?".$name."to?value"?.?$value."\n";
????}
}
$obj?=?new?MagicTest();
echo?$obj->className."\n";?//className未定義,但是通過魔術方法__get,這個方法好像被定義了一樣
$obj->className='MagicClassX';
?>為啥我的__set魔術方法不起作用,只output
Getting the property className 然后直接跟著MagicClassX
2017-03-29
因為是echo而非return
2015-09-30
?public?function?__set($name,?$value){
????????return?"Setting?the?property?".$name."to?value"?.?$value."\n";
????}
你返回的是一個$obj->className賦值,而不是直接在該__set魔術方法輸出