Перемещение и переименование классов с использованием пространств имен
У меня есть несколько старых классов, которые я хотел бы перевести в каталог стилей PSR-0. Я хотел бы проверить работоспособность моего процесса.
- Переименовать и переместить существующий
FooPerson.class.php
подать вFoo/Person.php
, - Создайте
namespace Foo
вPerson.php
и при необходимости обновите все ссылки на классы, чтобы они были совместимы с пространством имен. Для совместимости со старым кодом создайте новый
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
испускается, и вы можете это исправить.