PHP变量范围问题
在我的代码中,当需要包含HTML或PHP代码段时,我使用类的公共load_代码段函数。(我这样做而不是直接的PHP变量范围问题,php,scope,Php,Scope,在我的代码中,当需要包含HTML或PHP代码段时,我使用类的公共load_代码段函数。(我这样做而不是直接的include_once,因为目录结构因某些变量而异) 我在变量作用域方面遇到了一些问题,因此我将问题缩小为:假设我在页面中定义了一个变量: $variable='你好,世界!“; 然后,我需要加载一个代码段: $APP->加载片段(“滑块”); 代码段呈现得非常完美,只是如果我尝试在滑块代码中引用$variable,PHP会给出一个未定义的变量错误。如果我直接包含PHP文件,它会按预期工
include_once
,因为目录结构因某些变量而异)
我在变量作用域方面遇到了一些问题,因此我将问题缩小为:假设我在页面中定义了一个变量:
$variable='你好,世界!“;
然后,我需要加载一个代码段:
$APP->加载片段(“滑块”);
代码段呈现得非常完美,只是如果我尝试在滑块代码中引用$variable
,PHP会给出一个未定义的变量错误。如果我直接包含PHP文件,它会按预期工作,因此我不明白为什么会出现此问题,因为这是加载代码段
函数:
public function load_snippet($snippet){
if(file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")){
include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";
}
else{
include 'common/txt/404.txt';
}
}
非常感谢您能给我的任何帮助。我认为函数中包含的内容对我来说毫无意义……我认为您应该将函数
global $variable;
请注意,include将把代码放在函数中(include将被代码替换),我知道..我认为函数中的include对我来说没有意义…我认为您应该放在函数中
global $variable;
注意,include将把代码放在函数中(include将被代码替换)正如我所知,..你这样做的方式很难看,但是你可以在被剪掉的函数或方法中使用global$variable
来引用变量。但是,如果你在函数或方法中包含被剪掉的变量,你必须使该函数/方法中的变量也是全局的你这样做的方式很难看,但是你可以在被截断的变量中使用global$variable
引用该变量。但是,如果在函数或方法中包含被截断的变量,则必须将该函数/方法中的变量设置为全局变量文件包含在load\u snippet()的上下文中
函数,因此只有该函数中存在的变量。修改该函数的一种方法是使函数接受两个变量:文件名和值数组
public function load_snippet($snippet, $content) {
if (is_array($content)) extract($content);
if (file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")) {
include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";
} else {
include 'common/txt/404.txt';
}
}
然后
该文件包含在load\u snippet()
函数的上下文中,因此只有该函数中存在的变量。修改该文件的一种方法是使函数接受两个变量:文件名和值数组
public function load_snippet($snippet, $content) {
if (is_array($content)) extract($content);
if (file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")) {
include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";
} else {
include 'common/txt/404.txt';
}
}
然后
您将包含在一个类中。这意味着包含的文件与包含它的代码行具有相同的变量范围。要解决此问题,您只需将
global $variable;
在include的上方。您将包含在一个类中。这意味着包含的文件与包含它的代码行具有相同的变量范围。要解决此问题,只需将
global $variable;
如果您需要App::load_snippet()
方法中的$variable
,最好将其传入:
public function load_snippet($snippet, $var='Hello world'){
if(file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")){
include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";
}else{
include 'common/txt/404.txt';
}
}
//do something with $var
}
您可以设置未设置$variable
时的默认值。没有全局变量,也没有范围外变量。如果您需要$variable
在App::load_snippet()
方法中,最好将其传入:
public function load_snippet($snippet, $var='Hello world'){
if(file_exists("app/".$this->APP_TYPE."/snippets/".$snippet.".php")){
include "app/".$this->APP_TYPE."/snippets/".$snippet.".php";
}else{
include 'common/txt/404.txt';
}
}
//do something with $var
}
当未设置$variable
时,您可以设置默认值。没有全局变量,没有范围外变量。相反,您可以使用define('variable','value')等常量。这些常量将在文件中的任何位置可用。相反,您可以使用define('variable','value')等常量.php文件中的任何地方都可以使用它我想我可能知道这个问题,但是你能发布滑动代码以便我可以确定,或者只是引用$variable
@Tomas的部分代码吗?.php文件中有一些HTML,其中有
。这不仅仅是这个片段,出于某种原因,它会发生我使用load\u snippet
函数的时候。好吧,这粉碎了我的想法(我的想法是滑块在函数中,函数没有声明$variable是全局变量)…等等,load snippet在类中。因此,在类中包含意味着这就是问题所在。要解决它,只需将global$variable;
放在包含项上方,我想我可能知道问题所在,但您能否发布滑块代码以便我确定,或者只发布引用$variable
@Tomas的部分代码?所有这些代码中都有一些HTML一个.php文件,其中包含
。这不仅仅是这个片段,出于某种原因,每当我使用load\u snippet
函数时,它都会发生。好吧,这粉碎了我的想法(我的想法是滑块在函数中,函数没有声明$variable是全局变量)…等等,load snippet在类中。因此,在类中包含意味着这就是问题所在。要解决此问题,只需将global$variable;
放在include上方,您可以随时包含(从干净代码的角度来看,这没有意义)我在Joomla模块(Joomla的一些早期版本)中见过这种方法,并且存在范围问题,因为模块使用全局变量,但变量不在全局范围内,而是在函数的范围内(在包含该文件的函数范围内,该文件声明了引用全局$variable的类/方法)我知道,include
ing在函数内部对我来说似乎也很尴尬……但问题是,必须有更好的DRY&MVC方法来实现这一点,而不是不断地使用include(“app/game/snippets/snippet.php”)
。在函数中放入global$variable
,当我有许多不同的变量需要在不同的代码段中引用时,这难道不是多余的吗?你可以创建一个函数,在snippet.php中输出你的东西。并调用该函数,而不是包含..但是它可能需要extr