if if else如果条件不正常

时间:2014-10-30 22:31:36

标签: php if-statement namespaces slim php-5.5

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永远不存在。

2 个答案:

答案 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";
    }
}