Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP for循环不访问传入参数但可在for循环外部访问的变量_Php_Apache_Frameworks_Php 8 - Fatal编程技术网

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

PHP for循环不访问传入参数但可在for循环外部访问的变量,php,apache,frameworks,php-8,Php,Apache,Frameworks,Php 8,您好,我正在编写自己的php特定框架,因为其他框架无法完成我想要完成的工作 这是一个巨大的任务,我决定改变我的“路由系统”,这要求我预加载从$settings参数拖入的选定类。我将一个“设置”类传递到正在访问的类构造函数param中,我已经检查了数组计数,还检查了它是否设置为,但是一旦进入for循环,它就为null 警告:第6行的/***/***/*****/phpframew/System/App.php中未定义变量$settings for循环只是预加载添加到Settings类中的类 我的问

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

这是一个巨大的任务,我决定改变我的“路由系统”,这要求我预加载从
$settings
参数拖入的选定类。我将一个“设置”类传递到正在访问的类构造函数param中,我已经检查了数组计数,还检查了它是否设置为,但是一旦进入for循环,它就为null

警告:第6行的/***/***/*****/phpframew/System/App.php中未定义变量$settings

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

我的问题是

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

    • 您没有考虑函数中变量的范围

      如果希望嵌套函数中的“设置”可用,则需要将其作为参数传递:

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

      <?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';
                  });
              }
          }
      }
      ?>
      

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

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

      如果希望嵌套函数中的“设置”可用,则需要将其作为参数传递:

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

      <?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';
                  });
              }
          }
      }
      ?>
      

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

      谢谢,我的朋友工作如梦。考虑到你回答了我的问题,并建议我走另一条路,我一定会研究PSR-4谢谢你分享知识谢谢你我的朋友工作如梦。考虑到你回答了我的问题,并建议我走另一条路,我一定会研究PSR-4,谢谢你分享这些知识