我今天发现了__autoload函数,在阅读了这个函数的官方手册页后,有一点我完全没有.
使用__autoload()和让我们说require_once之间的区别是什么?
因为它看起来像自动加载是新的时尚方式来做所需的包括但对我而言,使用require_once更好.因此,__ autoload必须被定义到所有的php文件中,这意味着在那里写下它的代码,如果我把所有的 includes/require_once/...等放到一个文件中让我们把它叫做main_header.php那么我需要做的就是在我的网络应用程序文件中写一行代码:
<?php require_once('main_header.php'); ?>
Run Code Online (Sandbox Code Playgroud)
我错了吗?
Jon*_*Jon 18
我可以看到自动加载的两件事(不一定__autoload;更喜欢更现代的spl_autoload_register):
main_header.php在您的示例中创建一个,但随后下一个项目生效.还值得指出的是,在对尚未定义的类的对象进行反序列化时也会触发自动加载,这会使事情变得无比实用.当然还有另一个钩子unserialize(配置设置unserialize_callback_func),因此自动加载在技术上是不必要的.这绝对更好.
第一:使用spl_autoload_register()而不是__autoload().
当您尝试访问不存在的类时,将调用自动加载器.有了include()你只包括一类.主要的区别在于,使用自动加载器只包含类,如果真的需要/使用它.
通常,您在一个文件中定义自动加载器,并在每个请求中包含此自动加载器.如果你使用bootstrapping(意思是:一个文件,捕获每个请求并将其重定向到适当的目标),它只需要在那里定义自动加载器.所以它不需要在每个文件中定义它.
Autoloader用于延迟初始化.它是最有效的MVC架构,而不是在这里和那里包含文件的网站,并在每个文件中定义数据库连接字符串(这很糟糕).
将自动加载与MVC框架一起使用可以节省资源并为模块化带来很多好处.由于您不必包含具有类的文件,因此您只需在当前所在的控制器中实例化所需的类.
基本上,这是一个OOP的事情.如果你没有使用对象方法来构建你的网站,那么你不应该担心它包含/ require是什么对你有用.