PHP for 循环不访问参数中传递的变量但可在 for 循环外部访问

PHP for loop not accessing variable passed in params but accessible outside for loop

<?php 
class App {
    function __construct($settings) {
        /*if(isset($settings->preload)) {
            die('yes');
        } else {
            die('no');
        }*/
        for ($i = 0; $i <= sizeof($settings->preload); $i++) {
            spl_autoload_register(function($class_name) {
                if(file_exists($settings->preload[$i].$class_name.'.php'))
                    require_once ''.$settings->preload[$i].$class_name.'.php';
            });
        }
    }
}
?>

您好,我正在编写自己的 php 特定框架,因为其他框架无法完成我想要完成的工作,

这是一项艰巨的任务,我决定更改我的“路由系统”,这需要我预加载从 $settings 参数中拖入的选定 classes。我正在将“设置”class 传递到正在访问的 class 构造函数参数中,我检查了数组计数并检查了它是否已设置,但是一旦它进入for 循环它是 null

Warning: Undefined variable $settings in /***/*****/****/PHPFRAMEWORK/System/App.php on line 6

for 循环只是预加载添加到设置 class 中的 classes。

我的问题是

您没有考虑函数内变量的范围。

如果您想在嵌套函数中使用“设置”,您需要将其作为参数传递:

在您的 for 循环中,如果您希望设置可用,您需要将 $settings 作为参数传递给您要引入的匿名函数 spl_autoload_register:

            spl_autoload_register(function($class_name`, $settings) {
                if(file_exists($settings->preload[$i].$class_name.'.php'))
                    require_once ''.$settings->preload[$i].$class_name.'.php';
            });
        

PS:我第一次尝试构建自己的自动加载器时,我构建了类似的东西。我不想告诉你不要尝试构建自己的,但我确实建议你研究命名空间和 PSR-4 自动加载。