質問
私はのように、別の名前空間で定数を定義した場合ことを期待していました
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
をシミュレートできることをいくつかの方法は?
解決
これは(私のサーバー上で働いていた)してみます:
<?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()ことができますそうすることによって動作するクラスを作成する必要があります。
他のヒント
未定義の定数を使用するには、PHPの警告がスローされます。
あなたは適切な定数ファイルに警告や負荷をキャッチするためにカスタムエラーハンドラを記述することができます。
所属していません StackOverflow