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


Relocating and renaming classes using namespaces

我有许多较旧的类,我想将它们转换到PSR-0样式的目录中。我想检查一下我的流程。

  1. 重命名现有的FooPerson.class.php文件并将其重新定位为Foo/Person.php
  2. Person.php中创建namespace Foo,并根据需要更新所有类引用以使其与命名空间兼容
  3. 为了与旧代码兼容,创建一个包含以下内容的新FooPerson.class.php

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

我希望这将使用new FooPersonnew 'Foo'Person实现透明实例化。初步测试似乎支持这一点。是否存在我应该注意的陷阱?

我没有发现任何陷阱。然而,我建议使用另一种方法,因为这种方法可能会让你错过一个或另一个旧类名。要么你完全删除FooPerson,在这种情况下,你会意识到困难的方法,你忘记更改类名,或者创建一个伪类,当有人试图使用它时,它可以帮助你跟踪消息。

// File 'FooPerson.php'
trigger_error("Class 'FooPerson'", E_USER_DEPRECATED);
class FooPerson extends 'Foo'Person {}

因为根据psr-0标准,类到文件名的映射是有效的,所以这个文件也会被自动加载器加载。在自动加载器加载的情况下,会发出E_USER_DEPRECATED,您可以修复它。