因此,作为项目的一部分,我正在考虑建立一个标记系统。这背后的想法是每天运行的一个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
语句之前明确地调用它。