test.php的
<?php
$a = 'D:/mydomain/Slim/Lib/Table.php';
$b = '\Slim\Lib\Table';
foreach (array($a, $b) as $value)
{
if (file_exists($value))
{
echo "file_exist";
include_once($value);
new Table();
}
else if (class_exists($value))
{
echo "class_exist";
$class = new $value();
}
else
{
echo "error";
}
}
?>
和D:/mydomain/Slim/Lib/Table.php
<?php
class Table {
function hello()
{
echo "test";
}
function justTest()
{
echo "just test";
}
}
?>
当我在浏览器中执行test.php时,输出结果是:
file_exist 致命错误:无法在第2行的D:/mydomain/Slim/Lib/Table.php中重新声明类表
如果class_exist的语句不是触发器。 namespace \ Slim \ Lib \ Table永远不存在。
答案 0 :(得分:1)
class_exists
的第二个可选参数是bool $autoload = true
,因此它会尝试自动加载此类。尝试将此来电更改为class_exists( $value, false)
请参阅manual。
答案 1 :(得分:1)
第一个if可以改为:
if(!class_exists($ value)&amp;&amp; file_exists($ file)
实际上还有其他问题:
$a = 'D:/mydomain/Slim/Lib/Table.php';
$b = 'Table'; //Since you don't have a namespace in the Table class...
//This ensures that the class and table are a pair and not checked twice
foreach (array($a=>$b) as $file=>$value)
{
if (!class_exists($value) && file_exists($file))
{
echo "file_exist";
include_once($file);
$class = new $value();
}
else if (class_exists($value))
{
echo "class_exist";
$class = new $value();
}
else
{
echo "error";
}
}