我有一些旧的类要转换到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 FooPersonnew \Foo\Person的透明实例化。初步测试似乎支持这一点。有什么陷阱我应该注意吗?

最佳答案

我看不出有什么陷阱。但是,我建议使用另一种方法,因为这个方法可能会让您错过一个或另一个旧类名。要么完全删除FooPerson,在这种情况下,您将意识到一个困难的方法,即忘记更改类名,要么创建一个虚拟类,这有助于在有人试图使用消息时跟踪消息。

// File 'FooPerson.php'

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

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

08-19 10:24