猿问

ReflectionProperty 构造函数

如果有人可以解释我的以下行为,我将不胜感激(同时更明智;))


我们有一堂课。


class Test {

    public $id;

    private $name;

    protected $color;

}

我们有我不完全理解的 ReflectionProperty 构造函数行为。


先做一个:


function check() {

    $class = new Test();

    $ref = new ReflectionObject($class);

    $pros = $ref->getProperties();

    foreach ($pros as $pro) {

        false && $pro = new ReflectionProperty();

        print_r($pro);

    }

}

这将给出正确的输出:


ReflectionProperty Object

(

    [name] => id

    [class] => Test

)

ReflectionProperty Object

(

    [name] => name

    [class] => Test

)

ReflectionProperty Object

(

    [name] => color

    [class] => Test

)

现在:如果我从这一行中删除“false”:


false && $pro = new ReflectionProperty();

输出将是:


PHP Fatal error:  Uncaught ArgumentCountError: ReflectionProperty::__construct() expects exactly 2 parameters, 0 given

ReflectionProperty::__construct() 接受 ($class, $name)


因此,问题是: 为什么 'false' 甚至首先起作用?


长风秋雁
浏览 166回答 2
2回答

缥缈止盈

它与 ReflectionProperty 构造函数本身无关。false && $pro = new ReflectionProperty();有什么东西叫短路。这意味着右边的代码只会在需要时执行。在这种情况下,因为您在左侧为 false 的情况下执行 && (AND),所以引擎知道结果永远不会等于 true,因此它不需要执行和评估右侧,即你的 ReflectionProperty 构造函数。基本上, false && 正在阻止您的损坏代码运行,然后 print_r 使用来自 getProperties 结果的 pro 的现有值。

慕标5832272

false && $pro = new ReflectionProperty();评估为false.因为第一个条件是false,所以不需要评估第二个$pro = new ReflectionProperty()(它被称为“短路评估”)。当你删除false你有行$pro = new ReflectionProperty();和ReflectionProperty构造函数需要两个参数(错误消息告诉你这个)。
随时随地看视频慕课网APP
我要回答