我的代码有奇怪的问题。我的代码与下面的代码几乎相同(我没有提供实际代码,因为它是一个有点大的库,有很多动态生成(基于路径路由等选择类,即框架))。
代码解释:
ClassA代表当前的路由对象。包含控制器、路由字符串等。
ScriptAClassAction是调度程序,检查路由是否包含执行和运行所有内容所必需的所有内容,控制器是否存在$!empty(reflection)
以及操作是否存在于控制器中$reflection->hasMethod('hello')
。
在我的世界中,如果两个条件都意味着(并且不是),则应该触发父级 if或者应该触发 else ,这是检查哪些检查失败。在执行时,我看到第一个检查通过(我认为这是 PHP 中的一个错误) ,然后触发else,然后是第二个if。
我在想这可能是 PHP 中的一个错误,但我很怀疑。有人看到我在凌晨 1:50 想念的东西吗?
PHP 5.3.27 启用了 xDebug(没有其他扩展)和 Apache 2.2.25(我相信 Apache 在这里无关,但是..),Windows 7 x86 Home Premium
类A.php
class A
{
public function init()
{
print 'Init called';
}
public function preDispatch()
{
print 'Predispatch called';
}
public function indexAction()
{
print 'Hello world';
}
public function postDispatch()
{
print "Post dispatch";
}
}
ScriptAClassAction.php
require 'ClassA.php';
$class = new A();
$reflection = new ReflectionClass($class);
if (!empty($reflection) && $reflection->hasMethod('indexAction')) {
if ($reflection->hasMethod('init')) $class->init($request, $response); //Prints 'Init called'
if ($reflection->hasMethod('preDispatch')) $class->preDispatch(); // 'Predispatch called'
$class->indexAction();
if ($reflection->hasMethod('postDispatch')) $class->postDispatch(); // 'post dispatch called'..
} else {
if (!$reflection) // I know this might not be the best check but..
print "Not a valid class supplied";
if (false == $reflection->hasMethod('indexAction')) // True trigger
print "Supplied class does not have any manners and does not greet you :D";
// This is the expected output and it should be the only output
}
** 输出 **
Init 称为 Predispatch 称为 Postdospatch 称为 Supplied 类没有任何礼仪,也不会打招呼:D