当autoload标志为false时,class_exists

时间:2017-03-01 14:24:57

标签: php

因此,作为项目的一部分,我正在考虑建立一个标记系统。这背后的想法是每天运行的一个cron作业,以确定一系列标志中的每一个是否仍然应用于特定对象(如果是,则保存该对象的标志数据)。

// code stub
$flags = $this->getFlags();
foreach($flags as $flag)
{
    $className = 'Svc_Flags_'.$flag->flag_code; 

    if(class_exists($className, false)
    {
        (new $className())->setFlag();
    }
}

现在,在该类的虚拟代码中,我有一个回显简单文本消息的构造函数,以及回显不同文本消息的函数setFlag()

<?php class Svc_Flags_Test extends Svc
{

public function __construct()
{
    echo 'construct<br/>';
}

public function setFlag()
{
    echo 'set flag<br/>';
}

}

现在,这不起作用。通过这个,我的意思是我没有看到任何回声。

但是,如果我这样做:

// code stub
$flags = $this->getFlags();
foreach($flags as $flag)
{
    $className = 'Svc_Flags_'.$flag->flag_code; 

    (new $className())->setFlag(); // This is the added line of code

    if(class_exists($className, false)
    {
        (new $className())->setFlag();
    }
}

我得到构造函数echo,setFlag() echo TWICE。

为什么会这样?现在,我很确定我可以在try/catch块中包含它的一部分,以便在没有类的情况下解决任何错误,但我很好奇为什么它似乎找不到除非我在if语句之前明确地调用它。

0 个答案:

没有答案