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
Неустранимая ошибка: невозможно переопределить класс Table в D: /mydomain/Slim/Lib/Table.php в строке 2
если оператор для class_exist не является триггером. Пространство имен \ Slim \ Lib \ Table никогда не существует.
Второй необязательный параметр class_exists
является bool $autoload = true
поэтому он пытается автозагрузить этот класс. Попробуйте изменить этот вызов на class_exists( $value, false)
Увидеть руководство.
Первый if может быть изменен на:
если (! class_exists ($ значение) && file_exists ($ файл)
На самом деле есть и другие проблемы:
$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";
}
}