Atl*_*tli 6 php const autoload
我希望如果我在一个单独的命名空间中定义常量,例如:
namespace config\database\mysql;
const HOST = 'localhost';
const USER = 'testusr';
const PASSWORD = 'testpwd';
const NAME = 'testdb';
Run Code Online (Sandbox Code Playgroud)
我可以__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;
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.该__autoload不叫为恒,因为它是带班,留我一个Undefined constant错误.
我可以通过某种方式模拟__autoload常量类吗?
试试这个(在我的服务器上工作):
<?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;
?>
Run Code Online (Sandbox Code Playgroud)
基本上你需要创建一个类来充当常量的包装,但这样做可以让__autoload()按你的意图工作.