Как я использую пространства имен PHP с автозагрузкой?

Я использовал Комбинацию однажды, которая казалась очень хорошей, и я могу пробовать чаще. vimdiff работает хорошо, если Вы знаете энергию хорошо. Наконец я упомянул бы, что нашел, что xxdiff делает разумное задание для быстрого сравнения. Существует много различных программ там, которые делают хорошее задание.

98
задан hakre 2 April 2013 в 12:12
поделиться

2 ответа

Class1 не входит в глобальную область видимости.

См. Ниже рабочий пример:

<?php

function __autoload($class)
{
    $parts = explode('\\', $class);
    require end($parts) . '.php';
}

use Person\Barnes\David as MyPerson;

$class = new MyPerson\Class1();

Edit (2009-12-14):

Чтобы уточнить, я использую «использовать ... как» было для упрощения примера.

Альтернатива была следующая:

$class = new Person\Barnes\David\Class1();

или

use Person\Barnes\David\Class1;

// ...

$class = new Class1();
116
ответ дан 24 November 2019 в 05:15
поделиться

Ваша функция __ autoload получит полное имя класса, включая имя пространства имен.

Это означает, что в вашем случае __ autoload функция получит ' Person \ Barnes \ David \ Class1 ', а не только ' Class1 '.

Итак, вам нужно изменить свой код автозагрузки, чтобы иметь дело с таким «более сложного» имени; часто используемое решение - организовать ваши файлы, используя один уровень каталогов на «уровень» пространств имен, и при автозагрузке заменить ' \ ' в имени пространства имен на DIRECTORY_SEPARATOR .

18
ответ дан 24 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: