使用命名空间重定位和重命名类

4

我有一些老的类,想将它们转换为PSR-0风格的目录。我希望对我的过程进行合理性检查。

  1. Rename and relocate the existing FooPerson.class.php file to Foo/Person.php.
  2. Create namespace Foo in Person.php, and update all class references to be namespace-compatible as appropriate.
  3. For compatibility with old code, create a new FooPerson.class.php with this content:

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

我希望这将使得使用new FooPersonnew \Foo\Person进行透明实例化成为可能。初步测试似乎支持这一点。我应该注意哪些陷阱呢?

1个回答

4

我没有看到任何陷阱。然而,我建议采用另一种方法,因为这种方法可能会让您错过一个或另一个旧类名。要么完全删除FooPerson,这样您就会意识到在哪里忘记更改类名,要么创建一个虚拟类,在尝试使用它时帮助您跟踪消息。

// File 'FooPerson.php'

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

由于类名和文件名的映射符合psr-0标准,因此您的自动加载程序也会加载此文件。如果自动加载程序加载了它,则会发出E_USER_DEPRECATED警告,您可以进行修复。


2
是的,关于触发错误的建议很好。E_USER_DEPRECATED 是最合适的选择。 - Annika Backstrom
@Adam,@netcoder:当然。不知道为什么,在我的世界里没有E_USER_DEPRECATED,但它将在5.4中出现^^ - KingCrunch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接