给PHP包含()’d文件父变量范围

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了给PHP包含()’d文件父变量范围脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_419_0@ 无论如何,在父作用域中使用的包含文件是否调用?以下示例已简化,但执行相同的工作.

本质上,函数将包含一个文件,但是希望包含文件的范围是调用包含它的函数的范围.

main.PHP

<?PHP
  if(!function_exists('myPlugin'))
  {
    function myPlugin($file)
      {
        if(file_exists($file)
        {
          require $file;
          return true;
        }
        return false;
      }
  }

  $myVAR = 'something bar foo';

  $success = myPlugin('included.PHP');

  if($success)
  {
    echo $myResult;
  }

included.PHP

<?PHP
  $myResult = strlen($myVar);

提前致谢,
亚历山大.

编辑:解决方

好吧,有点,谢谢Chacha102的贡献.
现在也可以从课堂内调用

main.PHP

<?PHP
  class front_controller extends controller
  {
    public function index_page()
    {
      $myVar = 'hello!';

      // This is the bIT that makes it work.
      // I kNow,wrapping it in an extract() is ugly,// and the amount of parameters that you can't change...
      extract(load_file('included.PHP',get_defined_vars(),$this));

      var_dump($myResult);
    }
    public function get_something()
    {
      return 'foo bar';
    }
  }

  function load_file($_file,$vars = array(),&amp;$c = null)
  {
    if(!file_exists($_file))
    {
      return false;
    }
    if(is_array($vars))
    {
      unset($vars['c'],$vars['_file']);
      extract($vars);
    }
    require $_file;
    return get_defined_vars();
  }

included.PHP

<?PHP
  $myResult = array(
    $myVar,$c->get_something()
  );

如果要引用方法,则必须公开,但结果如预期:

array(2) {
  [0]=>
  string(6) "hello!"
  [1]=>
  string(7) "foo bar"
}

现在,这没有任何实际用途,我想知道如何做到的唯一原因是因为我很固执.这个想法进入了我的脑海,不会让它打败我:D

<咆哮>
感谢所有贡献者.除了嘘我的人.这是一个简单的问题,现在已经发现存在(复杂的)解决方案.
搞砸它是否“符合PHP的做事方式”.曾告诉客户“哦不,我们不应该这样做,这不是正确的做事方式!”?没想到.
< /咆哮>

再次感谢Chacha102

脚本宝典总结

以上是脚本宝典为你收集整理的给PHP包含()’d文件父变量范围全部内容,希望文章能够帮你解决给PHP包含()’d文件父变量范围所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。