【发布时间】:2016-10-25 05:17:49
【问题描述】:
许多编写面向对象应用程序的开发人员创建了一个 PHP 每个类定义的源文件。最大的烦恼之一是 必须在开头写一长串所需的包含 每个脚本(每个类一个)。
在 PHP 5 中,这不再是必需的。 spl_autoload_register() 函数注册任意数量的自动加载器,启用类和 如果当前未加载接口,则自动加载 定义。通过注册自动加载器,PHP 获得了最后的机会 在类或接口因错误而失败之前加载它。
问题来了,如果一个php文件中有多个类,是否适合自动加载使用?还是我必须使用require filepath 声明?
比如我在Protobuf\Client.php下有个协议文件:
<?php
namespace Protobuf;
class A {
...
}
class B {
...
}
【问题讨论】:
-
您必须有一些复杂的函数才能从名为
Client.php的文件中自动加载这些类。这个想法是将您的命名空间\类名转换为directory\filename.php -
在这种情况下,您需要将文件命名为
A.php,然后当您调用new Protobuf\A()时,它会找到它。否则你将不得不创建一个过于复杂的自动加载器。 -
最后,如果你创建它以便自动加载器找到
A类,那么你可以在同一个文件上拥有B,但前提是你已经自动加载了A,否则你有做一些算法来知道A和B在同一页上。 -
@Rasclatt,“复制粘贴”你的三个 cmets 作为答案,你是对的。
-
@P0lT10n 是的,我可能应该这样做。这是一个滚动的想法,我一直在阐述……有点啰嗦。