Php 魔法方法uuu get和uuu set-来自ZCE的示例

Php 魔法方法uuu get和uuu set-来自ZCE的示例,php,magic-methods,Php,Magic Methods,那么…你期待什么 如果您在实际范围内没有访问属性/属性不存在的权限,它将调用\uuu get/\uu set 所以$m->a直接得到“a”$m->b和$m->c先调用\u get(“b”)和\u get(“c”)(在回显“b,c”后返回“b”和“c”) 这同样适用于$m->c=“CC”:它调用\u set(“c”、“CC”),因为$c是受保护(不可访问)的属性。(在回显“c:CC”后将$m->c设置为“CC”)为什么小写字母都在大写字母之前?因为字符串首先被连接起来,需要提取(提取时会立即调用回

那么…你期待什么

如果您在实际范围内没有访问属性/属性不存在的权限,它将调用
\uuu get
/
\uu set

所以
$m->a
直接得到“a”
$m->b
$m->c
先调用
\u get(“b”)
\u get(“c”)
(在回显“b,c”后返回“b”和“c”)


这同样适用于
$m->c=“CC”
:它调用
\u set(“c”、“CC”)
,因为
$c
是受保护(不可访问)的属性。(在回显“c:CC”后将$m->c设置为“CC”)

为什么小写字母都在大写字母之前?因为字符串首先被连接起来,需要提取(提取时会立即调用回显集中的回显;不等待字符串连接完成)值,并且只有在读取值之后,它才会输出字符串。(尝试将echo语句中的“.”替换为“,”。然后,它的解释就像存在不同的echo语句一样。) class Magic { public $a = "A"; protected $b = array("a" => "A", "b" => "B", "c" => "C"); protected $c = array(1,2,3); public function __get($v) { echo "$v, "; return $this->b[$v]; } public function __set($var, $val) { echo "$var: $val,"; $this->$var = $val; } } $m = new Magic(); echo $m->a.", ".$m->b.", ".$m->c.","; $m->c = "CC"; echo $m->a.", ".$m->b.", ".$m->c.",";
b, c, A, B, C,c: CC,b, c, A, B, C,