【问题标题】:How do I go about loading vars from an include() within a function()?如何从函数()中的包含()加载变量?
【发布时间】:2011-09-19 06:58:11
【问题描述】:

我正在尝试从 .php 文件中获取一些变量。我调用了一个函数,其中包含一个包含我想要的变量的文件,但它不会返回任何内容。在函数内我可以查看变量值,但不能在函数外查看。

//MODULE INCLUDE
function moduleInclude($mid) {
$query = "SELECT file,type FROM sh_module WHERE mid = '{$mid}'";
$exe = mysql_query($query);
$row = mysql_fetch_array($exe);
$folder = moduleFolder($row['type']);
$output = include("../includes/modules/".$folder."/".$row['file']);

return $output;
}

//Load the vars
moduleInclude($mod_ship);
$ship_meth = $MODULE_title_client;
//THE ^^^^ MODULE_title_client never returns anything :(

【问题讨论】:

  • 包含的"../includes/modules/".$folder."/".$row['file'] 文件包含什么?

标签: php function variables include


【解决方案1】:

只需在包含文件的末尾返回一个对象:

$foo = 1;
$bar = 2;
return array('foo' => $foo, 'bar' => $bar)

然后,include 将返回模块中返回的数组。

【讨论】:

    【解决方案2】:

    我认为你可以使用这样的东西:

    //MODULE INCLUDE
    function moduleInclude($mid) {
        $query = "SELECT file,type FROM sh_module WHERE mid = '{$mid}'";
        $exe = mysql_query($query);
        $row = mysql_fetch_array($exe);
        $folder = moduleFolder($row['type']);
        include("../includes/modules/".$folder."/".$row['file']);
        return get_defined_vars();
    }
    
    //Load the vars from include file into array
    $module_vars=moduleInclude($mod_ship);
    //Use the desired variable
    $ship_meth = $module_vars['MODULE_title_client'];
    

    如果我理解正确的话。这真的很难看,我建议您了解更多关于variable scopes 的信息以使这段代码更好,因为包含在函数中几乎总是错误的方式。我认为我们需要知道您的包含文件 "../includes/modules/".$folder."/".$row['file'] 中发生了什么,以便更好地帮助您。

    【讨论】:

      【解决方案3】:

      include 不返回文件包含的内容,只是将该文件的代码放在包含文件的位置。

      并且文件中声明的变量在include语句之后可用。但是当您尝试在函数之外访问它们时,变量将无法访问,因为它们现在是函数范围。

      您可以更新代码以从函数外部包含该文件。

      function moduleInclude($mid) {
      $query = "SELECT file,type FROM sh_module WHERE mid = '{$mid}'";
      $exe = mysql_query($query);
      $row = mysql_fetch_array($exe);
      $folder = moduleFolder($row['type']);
      return "../includes/modules/".$folder."/".$row['file'];
      }
      
      //Load the vars
      $include_path=moduleInclude($mod_ship);
      include $include_path;
      $ship_meth = $MODULE_title_client;
      

      【讨论】:

      • 是的,但这是否意味着我可以调用一个变量?我不认为它可以?
      • 好主意,有道理!然后我可以用 URL 字符串在本地调用它。
      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 2014-09-30
      • 2022-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2014-02-14
      • 2012-10-19
      相关资源
      最近更新 更多