将无返回值(void)方法调用结果赋值给变量的意义与执行机制问询
关于无返回值方法赋值给变量的疑问解答
为什么赋值操作会触发方法执行?
先给你理清一个核心逻辑:不管是直接调用方法,还是把方法调用的结果赋值给变量,只要你写了方法名()这种调用语法,方法就一定会被执行。
在PHP里,没有显式返回值(或者声明为void)的方法,默认会返回null。当你写$var = $this->hello();时,PHP的执行顺序是:
- 优先执行右边的
$this->hello(),也就是运行方法里的echo "hello!";代码; - 把方法的默认返回值
null赋值给变量$var。
而直接写$this->hello();时,只完成第一步的方法执行,没有第二步的赋值动作——所以两者看起来效果一致,都会输出hello!,区别只是前者多了一个把null存到变量里的无意义操作。
这种赋值操作有什么意义?
大部分情况下,这种写法其实没有实际价值,甚至可能是代码失误(比如开发者误以为方法会返回有用值,不小心加了赋值)。但也存在几种少见的场景:
- 预留扩展空间:如果以后打算修改这个方法,让它返回业务相关的值,现在先写好赋值代码,后续改方法逻辑时就不用再调整调用处的代码;
- 显式强调执行动作:有些开发者会用这种方式明确标记“这里主动调用了方法”,避免后续维护时误以为是漏写的代码;
- 临时调试需求:偶尔会打印赋值后的
$var,确认方法确实返回了null,不过这种场景非常少见。
用你给出的示例代码再补充说明:
class test { public function hello() { echo "hello!"; } public function assign() { $var = $this->hello(); $this->hello(); //both seem to be doing the same thing } }
这里两次调用hello()都会输出hello!,唯一的区别是$var被赋值为null,如果这个变量后续没有被使用,那这行赋值代码完全是多余的。
内容的提问来源于stack exchange,提问作者user9582261
相关产品推荐
相关产品推荐

