(PHP)为什么这是以下回显的输出? - php

我正在为考试准备一些PHP问题,在下面的问题中,显然(B)是答案。

以下代码的输出是什么?

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;

答:A,数组,数组,A,数组,数组,CC
B:b,c,A,B,C,c:CC,b,c,A,B,C
C:a,b,c,A,B,C,c:CC,a,b,c,A,B,C
D:b,c,A,B,C,c:CC,b,c,A,B,CC

很抱歉这个菜鸟问题,但是来自Java,我一生无法理解为什么这是正确的答案。

参考方案

$b$c是受保护的属性,因此不能在类范围之外进行设置。 $a是公开的,因此可以直接设置/访问。

为了访问$b$c,它将回退到魔术吸气剂,该吸气剂从$b数组中检索值。

逻辑如下:

b, <- getter echo (executed by $m->b)
c, <- getter echo (executed by $m->c)
A, <- public property value (this is the start of the first global echo expression)
B, <- getter return b[b]
C, <- getter return b[c]
c: CC, <- setter echo, sets c = CC, but c is never accessed
b, <- getter echo (executed by $m->b)
c, <- getter echo (executed by $m->c)
A, <- public property value (this is the start of the second global echo expression)
B, <- getter return b[b]
C <- getter return b[c]

首先处理吸气剂回声,因为它们的回声语句在回声表达式(带有连接)完成评估之前就已到达。

由于$a是公开的,因此不使用魔术设置器或获取器。

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…