Перемещение и переименование классов с использованием пространств имен - PullRequest
4 голосов
/ 08 июня 2011

У меня есть несколько старших классов, которые я хотел бы перевести в каталог стиля PSR-0 .Я хотел бы проверить работоспособность моего процесса.

  1. Переименуйте и переместите существующий файл FooPerson.class.php в Foo/Person.php.
  2. Создайте namespace Foo в Person.php ипри необходимости обновите все ссылки на классы, чтобы они были совместимы с пространством имен.
  3. Для совместимости со старым кодом создайте новый FooPerson.class.php с таким содержимым:

    <?php
    
    require 'autoload.php'; // our psr-0 autoloader
    class_alias( '\Foo\Person', 'FooPerson' );
    

Я надеюсь, что это обеспечит прозрачную реализацию с использованием new FooPerson или new \Foo\Person.Начальное тестирование, кажется, подтверждает это.Есть ли подводные камни, о которых я должен знать?

1 Ответ

4 голосов
/ 08 июня 2011

Я не вижу никаких подводных камней. Однако я предлагаю использовать другой подход, потому что этот может позволить вам пропустить то или иное старое имя класса. Либо вы полностью удалите FooPerson, и в этом случае вы поймете трудный путь, когда вы забыли изменить имя класса, либо создадите фиктивный класс, который поможет вам отслеживать сообщение, когда кто-то пытается его использовать.

// File 'FooPerson.php'

trigger_error("Class 'FooPerson'", E_USER_DEPRECATED);
class FooPerson extends \Foo\Person {}

Поскольку сопоставление класса и имени файла допустимо в соответствии со стандартом psr-0, этот файл также загружается вашим автозагрузчиком. В случае если загружен автозагрузчиком, выдается E_USER_DEPRECATED, и вы можете это исправить.

...