8

我希望如果我要在单独的命名空间中定义常量,例如:

namespace config\database\mysql;

const HOST = 'localhost';
const USER = 'testusr';
const PASSWORD = 'testpwd';
const NAME = 'testdb';

我可以__autoload用来自动包含它们:

function __autoload($className)
{
    echo "Autoload: {$className}\n";
    $class_file = str_replace('\\', '/', $className) . ".php";
    if(file_exists($class_file)) {
        include $class_file;
    }
}

echo config\database\mysql\HOST;

但是,这不起作用。不会像类一样调用常量,这__autoload给我留下了一个Undefined constant错误。

某种方式可以模拟__autoload常量类?

4

2 回答 2

8

试试这个(在我的服务器上工作):

<?php
namespace config\database\mysql;

class Mysql
{
    const HOST = 'localhost';
    const USER = 'testusr';
    const PASSWORD = 'testpwd';
    const NAME = 'testdb';
}
?>

<?php
function __autoload($className)
{
    echo "Autoload: {$className}\n";
    $class_file = str_replace('\\', '/', $className) . ".php";
    if(file_exists($class_file)) {
        include $class_file;
    }
}

echo config\database\mysql\Mysql::HOST;
?>

基本上,您需要创建一个类来充当常量的包装器,但这样做可以让 __autoload() 按您的预期工作。

于 2010-01-21T15:41:32.107 回答
-2

使用未定义的常量将引发 PHP 警告。

您可以编写自定义错误处理程序来捕获警告并加载到适当的常量文件中。

于 2010-01-21T15:35:50.167 回答