为什么returns这个namespace\class调用出错?
Why returns this namespace\class call an error?
我在同一命名空间内动态调用 class 时遇到问题。
为了简化我的系统:
我有这个命名空间结构:
core
core\classes
在core\classes
中有两个class(在两个文件中,之前都包含):
class AUTO_LOAD
{
public function regSingleton($event)
{
$temp_event = $event;
//$event = '_' . $event;
//global $$event;
//$$event = $temp_event::newInst(); // the old version without namespaces - this worked
HELPER::varDump(SYSTEM::newInst()); // this works
HELPER::varDump($temp_event::newInst()); // this doesn't work
exit;
}
}
和
class SYSTEM
{
// Some code;
}
然后实例化AUTO_LOAD
:
$_AUTO_LOAD = new AUTO_LOAD;
$_AUTO_LOAD->regSingleton('SYSTEM');
输出:
object(core\classes\SYSTEM)#2 (3) {}
Fatal error: Class 'SYSTEM' not found in
.../system/includes/classes/class.autoload.php
正如您在上面看到的,如果我尝试调用 SYSTEM::newInst()
(静态),它会起作用,但如果我尝试 运行,它会动态调用($temp_event::newInst()
),但它不起作用。
通过 '\' . __NAMESPACE__ . '\' . $temp_event::newInst();
和 '\core\classes\' . $temp_event::newInst();
的直接调用都不起作用(相同的输出)。
错误在哪里(推理)?提前感谢您的帮助!
PS: 我已经读过 PHP namespace with Dynamic class name 但我看不出有什么不同?
由于范围解析运算符 (::
) 的优先级高于连接 (.
),您的直接调用 '\' . __NAMESPACE__ . '\' . $temp_event::newInst();
将被评估为 ('\core\classes\') . ('SYSTEM'::newInst())
,因此不会'没用。
尝试将您的代码更改为:
$temp_event = __NAMESPACE__ . '\' . $event;
这将使 $temp_event
包含命名空间,$temp_event::newInst()
将被评估为 'core\classes\SYSTEM'::newInst()
,即 core\classes\SYSTEM::newInst()
。
我在同一命名空间内动态调用 class 时遇到问题。
为了简化我的系统:
我有这个命名空间结构:
core
core\classes
在core\classes
中有两个class(在两个文件中,之前都包含):
class AUTO_LOAD
{
public function regSingleton($event)
{
$temp_event = $event;
//$event = '_' . $event;
//global $$event;
//$$event = $temp_event::newInst(); // the old version without namespaces - this worked
HELPER::varDump(SYSTEM::newInst()); // this works
HELPER::varDump($temp_event::newInst()); // this doesn't work
exit;
}
}
和
class SYSTEM
{
// Some code;
}
然后实例化AUTO_LOAD
:
$_AUTO_LOAD = new AUTO_LOAD;
$_AUTO_LOAD->regSingleton('SYSTEM');
输出:
object(core\classes\SYSTEM)#2 (3) {}
Fatal error: Class 'SYSTEM' not found in .../system/includes/classes/class.autoload.php
正如您在上面看到的,如果我尝试调用 SYSTEM::newInst()
(静态),它会起作用,但如果我尝试 运行,它会动态调用($temp_event::newInst()
),但它不起作用。
通过 '\' . __NAMESPACE__ . '\' . $temp_event::newInst();
和 '\core\classes\' . $temp_event::newInst();
的直接调用都不起作用(相同的输出)。
错误在哪里(推理)?提前感谢您的帮助!
PS: 我已经读过 PHP namespace with Dynamic class name 但我看不出有什么不同?
由于范围解析运算符 (::
) 的优先级高于连接 (.
),您的直接调用 '\' . __NAMESPACE__ . '\' . $temp_event::newInst();
将被评估为 ('\core\classes\') . ('SYSTEM'::newInst())
,因此不会'没用。
尝试将您的代码更改为:
$temp_event = __NAMESPACE__ . '\' . $event;
这将使 $temp_event
包含命名空间,$temp_event::newInst()
将被评估为 'core\classes\SYSTEM'::newInst()
,即 core\classes\SYSTEM::newInst()
。