Перемещение и переименование классов с использованием пространств имен

У меня есть несколько старых классов, которые я хотел бы перевести в каталог стилей 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 ответ

Решение

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

// File 'FooPerson.php'

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

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

Другие вопросы по тегам