如果有人可以解释我的以下行为,我将不胜感激(同时更明智;))我们有一堂课。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 givenReflectionProperty::__construct() 接受 ($class, $name)因此,问题是: 为什么 'false' 甚至首先起作用?
2 回答

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

慕标5832272
TA贡献1966条经验 获得超4个赞
false && $pro = new ReflectionProperty();
评估为false
.
因为第一个条件是false
,所以不需要评估第二个$pro = new ReflectionProperty()
(它被称为“短路评估”)。
当你删除false
你有行
$pro = new ReflectionProperty();
和ReflectionProperty
构造函数需要两个参数(错误消息告诉你这个)。
- 2 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消