【问题标题】:Passing Variable FROM Included PHP File To Parent Script将变量从包含的 PHP 文件传递​​给父脚本
【发布时间】:2011-03-31 22:46:54
【问题描述】:

我在我的 WordPress 网站的 HEADER 中包含一个 PHP 文件,该文件通过 CSV 文件搜索并返回我需要的变量。我试图将它包含在标题中,因为它是我稍后将在整个站点中需要的变量。如果我对其进行测试并尝试从包含的脚本中回显此变量,则它可以正常工作。但是,在站点的其余部分,如果我尝试调用该变量,它不会返回任何内容。

我知道正在创建变量,因为我尝试回显它并且它有效。但是当我尝试从不同的脚本中使用该变量时,它不起作用。是否需要某种代码将变量传递给站点的其他部分?

【问题讨论】:

    标签: php variables include global-variables


    【解决方案1】:

    变量默认仅用于函数级别,如果您想在其他地方使用它们,则必须传递它们或将它们全球化。根据您的脚本的布局方式,您可以将其设为对象属性,在这种情况下,它将在您的对象可用的任何地方以及该对象的所有方法中都可用 - 另一种选择是使用全局 $var,但这很糟糕想法和糟糕的编码实践 - 另一种是使用 $_SESSION['myVar'] = $var 将其放入会话中,然后以相同的方式调用它 - 另一种方法是通过诸如 $database->getRows( $var),然后在另一边是“public function getRows ($var)”,现在你通过传递 $var 在那个函数中。

    【讨论】:

    • 您真的认为通过会话变量将您想要从一个 php 文件传递​​到另一个 php 文件的内容放置是明智的吗?实际上,我的示例在没有任何全球化或使用任何对象属性的情况下工作得很好。这在很大程度上取决于您包含文件的位置。如果它在函数内,则包含内的变量将保留在那里。如果它位于基础级别,它将在所有包含的文件中随处可访问。
    • 我说这是一种选择,我并不是在提倡通过会话或其他方式传递你的 SALT:P
    • 这不仅是一种选择——它也是一种选择。我尝试了无数解决方案,但没有任何效果,这太简单了,我不敢相信我忽略了它。我试图将 $var 从 if 函数中的 7 级深度包含传递给最外层的父级。由于 $var 既在包含内部,又在函数内部,并且在被调用后声明 - 设置为会话非常棒!而且我确实认为在这种情况下这是明智的,因为我只是将数字 1 到 10 作为变量传递给一个元素来设置一个类,而 javascript 不是一个选项 - 所以 BRAVO 我花了几个小时寻找这个解决方案!
    【解决方案2】:

    每次您想在新函数甚至新脚本中使用变量时,请确保 global $variable 变量。这将确保该变量在您需要的任何地方都可用。

    【讨论】:

    • 一般来说全局是个坏主意。
    • @Dagon:完全同意。 @gms8994:通过函数参数传递 vars 总是更好的解决方案。为什么新脚本是全局的?
    • 这解决了我的问题,感谢 gms8994!对于上面的那些,有没有更好的方法来达到同样的结果?再次感谢。
    • 对不起,我写的时候没有看到上面的答案。
    • @Wh1T3h4Ck5 因为他只是在做一个包含;如果他有函数,他可能已经知道参数等。我同意这是一个“坏”的想法,但它已经是一个 wordpress 网站,globals 比比皆是..
    【解决方案3】:

    3 个文件:

    a.php:

    <?php
    include("c.php");
    
    var_dump("c is ".$c . " after include()");
    
    function incit(){
        include("b.php");
        var_dump("b is ".$b . " inside incit()");
    }
    
    incit();
    var_dump("b is ".$b . " after incit()");
    
    
    
    ?>
    

    b.php:

    <?php
    $b="bear";
    ?>
    

    c.php:

    <?php
    $c="car";
    ?>
    

    输出如下所示:

    string(24) "c is car after include()" 
    string(24) "b is bear inside incit()" 
    string(19) "b is after incit()" 
    

    所以 $b 仅在函数范围内定义,而另一方面 $c 是“全局”定义的。 所以你必须注意你在什么范围内使用包含。

    【讨论】:

    • 对不起,我不明白这个答案。当我添加全局 $actual_zone;到 INCLUDED 文件中,我可以在我网站的其余部分使用该变量。我听说使用全局变量是一个坏主意(不知道为什么),但是如何使用更好的编码实践来获得相同的结果?
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多