Я работаю с пространствами имен и PHP 5.3 в моем фреймворковом проекте.У меня есть основной App
класс и Autoloader
класс.В классе App
я настроил несколько переменных окружения:
public static function setupEnv()
{
$os = 'UNIX';
if (stristr(PHP_OS,'WIN'))
{
$os = 'WIN';
}
if (!defined('DIRECTORY_SEPARATOR'))
{
define('DIRECTORY_SEPARATOR',($os == 'UNIX') ? '/' : '\\');
}
define('DS', \DIRECTORY_SEPARATOR);
if (!defined('PATH_SEPARATOR'))
{
define('PATH_SEPARATOR', ($os == 'UNIX') ? ':' : ';');
}
define('PS', \PATH_SEPARATOR);
if (!defined('APP_PATH'))
{
define('APP_PATH', dirname(dirname(__FILE__)));
define('AP', APP_PATH);
}
}
Константы определены правильно, как DIRECTORY_SEPARATOR
, так и DS
, и если я их здесь повторю, они будут работать отлично.Пространство имен для этого - Feather \ App.В классе Autoloader
я использую константу DS
, и она отлично работает.Класс Autoloader
находится в том же пространстве имен Feather \ App.
Я запускаю PHPUnit и создал этот тест - setupEnv()
вызывается в функции setUp()
PHPUnit:
public function testAutoloadFunction()
{
$this->assertEquals(
dirname(dirname(__FILE__)) . DS.'Components'.DS.'Collections'.DS.'Collection.php',
\Feather\App\Autoloader::Autoload('\\Feather\\Components\\Collections\\Collection')
);
}
Это не пройдёт проверку, даже если путь вернётся правильно.Там написано:
Use of undefined constant DS - assumed 'DS'
Итак, у меня много предыстории, чтобы ответить на мой вопрос - почему это ошибка?Я подумал, хорошо, может быть, мне нужно сослаться на \ Feather \ App \ DS, но это выдает следующее:
PHP Fatal error: Undefined constant 'Feather\App\DS' in /web/Feather/Tests/AutoloaderTest.php
Я думал, что константы были определены в глобальной области видимости, поэтому не стоитэто работа?Если нет, то как мне сделать так, чтобы PHPUnit был счастлив?Если я поставлю use Feather\App
вверху, он все равно потерпит неудачу с той же самой ошибкой assumed 'DS'
.
Может кто-нибудь объяснить это?До сих пор документация PHP была бесполезной!