问题
PHP 的method_exists()
[ doc page ] 检查方法是否存在并返回一个布尔值。但是:在特殊情况下(当类和方法同名时)这个函数真的调用了一个方法。我对此感到非常困惑,并附上了两个可复制的、可复制和粘贴的示例来证明。
问题
说真的,WTF?这是错误还是预期行为?我是否违反了一些导致这种情况的代码约定规则?
重现问题的代码
代码&编译结果:http: //viper-7.com/SFFRLL
<?php
class foo
{
public function foo()
{
echo 'Method foo() in class foo was called !';
}
}
$foo = new foo();
if (method_exists($foo, 'foo')) {
// The line above already triggers the execution of foo();
}
(故意)不重现问题的代码
代码&编译结果:http: //viper-7.com/MPLe5M
<?php
class foo
{
public function bar()
{
echo 'Method bar() in class foo was called !';
}
}
$foo = new foo();
if (method_exists($foo, 'bar')) {
// Nothing should happen
}