0
<?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参数中拖入的选定类。我正在将“设置”类传递给正在访问的类构造函数参数,我检查了数组计数并检查了它是否是它,但是一旦它进入 for 循环,它就为空

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

for 循环只是为了预加载添加到 Settings 类中的类。

我的问题是

  • 这段代码有什么问题?
  • 这是特定于 PHP 的问题吗?
4

1 回答 1

2

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

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

在您的 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:我第一次尝试构建自己的 Autoloader 时,我构建了类似的东西。我不想告诉你不要尝试构建自己的,但我建议你研究命名空间和 PSR-4 自动加载。

于 2021-01-05T10:07:22.993 回答