【问题标题】:Relocating and renaming classes using namespaces使用命名空间重定位和重命名类
【发布时间】:2011-09-10 09:39:08
【问题描述】:

我有一些较旧的类,我想将它们转换为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 的透明实例化。初步测试似乎支持这一点。我应该注意哪些陷阱?

【问题讨论】:

    标签: php namespaces psr-0


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,很好的电话回复:触发错误。 E_USER_DEPRECATED 最合适。
    • @Adam,@netcoder:当然。不知道为什么,但在我的世界里没有E_USER_DEPRECATED,它会出现在 5.4 ^^
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多