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 {
  [...]
}