PHP中的自动加载常量?

时间:2010-01-21 15:28:57

标签: php const autoload

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

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吗?

2 个答案:

答案 0 :(得分:7)

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

<?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()按你的意图工作。

答案 1 :(得分:-1)

使用未定义的常量会抛出PHP警告。

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