将变量从包含的PHP文件传递给父脚本

问题描述:

我将一个PHP文件包含到我的WordPress网站的头文件中,该文件通过CSV文件进行搜索并返回我需要的变量。我试图将它包含在头文件中,因为这是后期整个网站需要的变量。如果我测试它并尝试从包含的脚本中回显这个变量,它可以正常工作。但是,在网站的其他部分,如果我尝试调用该变量,则不会返回任何内容。将变量从包含的PHP文件传递给父脚本

我知道该变量正在创建,因为我试图回应它,它的工作原理。但是当我尝试从不同的脚本使用该变量时,它不起作用。有什么代码需要将变量传递给网站的其余部分?

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

+2

一般来说全球化是一个坏主意。 – 2011-03-31 22:52:57

+0

@Dagon:完全同意。 @ gms8994:通过函数参数传递变量总是更好的解决方案。为什么选择全新的脚本? – Wh1T3h4Ck5 2011-03-31 22:59:23

+0

这解决了我的问题,谢谢gms8994!对于上述情况,是否有更好的方法来达到相同的结果?再次感谢。 – Kevin 2011-03-31 23:27:24

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()" 

so $ b只在函数的作用域内定义,而$ c在另一方面是“全局”definde。 所以你必须注意你使用include的范围。

+0

对不起,我不明白这个答案。当我添加全局$ actual_zone;进入INCLUDED文件,我可以在我的网站的其余部分使用该变量。我听说使用全局变量是一个坏主意(不知道为什么),但是如何使用更好的编码实践来达到相同的结果呢? – Kevin 2011-03-31 23:32:12

变量仅默认为功能级别,如果您想在别处使用它们,则必须传递它们或将它们全局化。根据脚本的布局方式,可以将其设置为对象属性,在这种情况下,它可以在对象可用的任何位置以及该对象的所有方法中使用 - 另一种方法是使用全局$ var,但这很糟糕想法和错误的编码习惯 - 另一种方法是使用$ _SESSION ['myVar'] = $ var将它放入会话中,然后以相同的方式调用它 - 另一种方法是通过参数传递它,例如$ database-> getRows( $ var),然后在另一端“public function getRows($ var)”,现在你通过传递它来获得$ var。

+0

你真的认为把想要通过会话变量从一个php文件传递到另一个文件是明智的做法吗?实际上我的例子工作得很好,没有任何全球化或使用任何对象属性。它很大程度上取决于你包含文件的位置。如果它在函数内部,那么include中的变量将保持在那里。如果它位于基本级别,则在所有包含的文件中都可以访问它。 – ITroubs 2011-03-31 23:11:54

+1

我说这是一个选项,我不是主张通过SALT通过会话或其他东西:P – linus72982 2011-04-01 00:24:55

+0

它不仅是一个选项 - 它是选项。我尝试了无数的解决方案,没有任何工作,这很简单,我不相信我忽略了它。我试图从一个7层深的包含if函数的$ var传递给最外层的父类。由于$ var既包含在函数内,也在函数内部声明,并且在被调用后声明 - 设置为会话是BRILLIANT!而且我认为这是明智的做法,因为我只是将1到10的数字作为变量在元素上设置类,并且javascript不是一个选项 - 所以BRAVO我花了数小时寻找这个解决方案! – Bruce 2017-04-11 06:55:43