我有一些旧的类要转换到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
的透明实例化。初步测试似乎支持这一点。有什么陷阱我应该注意吗? 最佳答案
我看不出有什么陷阱。但是,我建议使用另一种方法,因为这个方法可能会让您错过一个或另一个旧类名。要么完全删除FooPerson
,在这种情况下,您将意识到一个困难的方法,即忘记更改类名,要么创建一个虚拟类,这有助于在有人试图使用消息时跟踪消息。
// File 'FooPerson.php'
trigger_error("Class 'FooPerson'", E_USER_DEPRECATED);
class FooPerson extends \Foo\Person {}
根据psr-0标准,类到文件名的映射是有效的,因此自动加载程序也会加载此文件。如果它是由自动加载器加载的,则会发出一个
E_USER_DEPRECATED
并可以修复它。