Php 需要时spl_自动加载_寄存器混淆
因此,我已经阅读了一些Php 需要时spl_自动加载_寄存器混淆,php,class,spl-autoload-register,Php,Class,Spl Autoload Register,因此,我已经阅读了一些PHP函数,并且理解了如何实例化它,尽管我在理解用例以及spl\u autoload\u register函数的功能方面遇到了困难。这就是我所拥有的 <?php spl_autoload_register(function($class){ require_once "classes/{$class}.php"; }); 如果我的页面不需要这些类中的每一个,那么它真的需要这些类吗?或者当它被这样调用时,它只需要吗 new Zipper; 请帮助我澄清spl
PHP
函数,并且理解了如何实例化它,尽管我在理解用例以及spl\u autoload\u register
函数的功能方面遇到了困难。这就是我所拥有的
<?php
spl_autoload_register(function($class){
require_once "classes/{$class}.php";
});
如果我的页面不需要这些类中的每一个,那么它真的需要这些类吗?或者当它被这样调用时,它只需要吗
new Zipper;
请帮助我澄清spl\u autoload\u register
功能的混淆。
命名约定也起作用吗?假设我尝试实例化新哈希这属于Security.php
它究竟如何知道如何需要该文件,或者像我说的那样,命名约定有帮助吗
示例
<?php
spl_autoload_register(function($class){
switch($class) {
case "Booger":
case "booger": $class = "Snot";
}
require_once "classes/{$class}.php";
});
spl\u autoload\u register
只允许类可能可用,而不会出错——它实际上不会实例化该类
您在回调中做什么取决于您。您的“Security.php”类文件应该如下所示:
class Security {
[...]
}
无论包含什么文件,例如require_once“classes/{$class}.php”
表示文件中的文件名和类名必须匹配$class
spl\u autoload\u寄存器
在启动内存中不可用的类时被调用。它实际上是一个安全网,告诉引擎在尚未加载的情况下在哪里查找类。因此,只有在脚本中首次使用该类时,才会包含某个文件
您可以编写关于要包含哪个文件的条件语句,但这不是一种非常干净的方法
最有用的用例是根据特定的命名约定为每个类创建一个文件。这使您和其他人以后更容易在项目中找到类。我知道它不会实例化类本身。就像我说的,我每一次都会得到这个函数,只是不是它的全部功能。但我相信你已经澄清了。如果我不编写require'Security.php'
并尝试使用它,spl\u autoload\u register
将有助于并尝试执行我在上述示例中在闭包中编写的操作,对吗?对。。假设该文件与您正在使用的类名存在。。这就像“按需加载此类文件”,而不是执行一堆require
行。好的,刚刚得到更新,因此命名约定需要精确。因此,在我的闭包中,假设我想纠正的话,我可以编写一个关闭$class
的转换用例。你可以在闭包中做任何你想做的事情。遵循PSR-1、PSR-2等标准可能是更好的做法。。。或者甚至使用与文件夹层次结构匹配的名称空间。这很好,只要classes/Snot.php
中存在class Booger
——但这没有意义。理想情况下,类名应该以某种方式与文件名匹配。对于非常小的项目,我通常会做一些类似于classes/ClassName.class.php
的事情,然后将其作为require“classes/{$class}.class.php”
进行要求,这样我就可以确定它是一个类文件。然而,有很多方法可以做到这一点。
class Security {
[...]
}