【问题标题】:PHP for loop not accessing variable passed in params but accessible outside for loopPHP for循环不访问参数中传递的变量但可以在for循环外部访问
【发布时间】:2021-04-11 01:30:04
【问题描述】:
<?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 循环,它就是 null

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

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

我的问题是

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

【问题讨论】:

    标签: php apache frameworks php-8


    【解决方案1】:

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

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

    在你的 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 自动加载。

    【讨论】:

    • 谢谢你,我的朋友像梦一样工作。考虑到您回答了我的问题并建议我采取不同的方式,我一定会研究 PSR-4 感谢分享知识
    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 2012-05-11
    • 1970-01-01
    • 2018-11-18
    • 2016-05-07
    • 2020-04-04
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多