当您手动包含PHP类时,可以在当前脚本运行时执行它,对吗?然后,您可以决定,如果一个条件匹配您加载它,如果它没有,您没有。
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
include '../../../Whatever/SanitizeUserInput.class.php';
SanitizeUserInput::sanitize($_POST['someFieldName']);
}但是假设我在这个类中使用了自拍特性。它是在开始时被有效加载,还是只有当它被使用时才会被加载?
我的意思是,我是否应该只在我100%肯定要在任何脚本(例如数据库连接、会话管理等)中使用的类中添加__autoload函数?
谢谢
发布于 2012-03-07 08:20:16
只有当您试图访问所需的类时,才会调用Autoload。最好是使用spl_autoload_register()而不是__autoload。
文档:
您可以定义一个__autoload()函数,如果您试图使用尚未定义的类/接口,则会自动调用该函数。
和
spl_autoload_register()为自动加载类提供了一种更灵活的替代方案。因此,不鼓励使用__autoload(),将来可能会取消使用或删除。
发布于 2012-03-07 08:22:30
当您尝试使用尚未加载的类时,Autoloading会启动:
include 'foo.php';
new Foo; // autoload not used, because the class already exists
// Bar is not yet loaded here, auto or otherwise
new Bar; // Bar is being autoloaded, because it was not yet loaded因此,自动加载是非常有效的。与需要时手工加载类相比,它的效率略低,因为调用autoload函数的开销很大。但是,通过手工跟踪加载的类要比自动跟踪要少得多。
发布于 2012-03-07 08:34:46
尝试一下,您将看到,每当PHP遇到一个它还不知道的类时,它就会调用您的autoload函数。当您的autoload函数告诉PHP这个类在哪个文件中时,它将加载这个文件。
为了简短起见,PHP只在需要时加载文件,即使在条件下也是如此,因此永远不会加载下面的测试类。
if (false)
{
$test = new CTest(); // never loaded with autoload.
}https://stackoverflow.com/questions/9597907
复制相似问题