在我的代码中,当我需要包含HTML或PHP代码段时,我使用类的公共load_snippet函数。 (我这样做而不是直接include_once
,因为目录结构因某些变量而异。)
我在变量范围方面遇到了一些问题,所以我把问题缩小到了这个问题:假设我在页面中定义了一个变量:
$variable = 'Hello World!";
然后,我需要加载一个片段:
$APP->load_snippet("slider");
该代码段完美呈现,但如果我尝试在滑块代码中引用$variable
,则PHP会给出未定义的变量错误。如果我直接include
php文件,它按预期工作,所以我不明白为什么我遇到这个问题,因为这是load_snippet
函数:
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';
}
}
非常感谢您给予我的任何帮助。
答案 0 :(得分:1)
我认为包含在函数内部对我没有意义......我认为你应该放入函数
global $variable;
请注意,include会将代码置于函数内(include会被代码替换),因为我知道..
答案 1 :(得分:1)
该文件包含在load_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';
}
}
然后
$arr = array('variable' => 'Hello world!');
load_snippet('slider', $arr);
答案 2 :(得分:0)
你这样做的方式很难看,但是你可以在剪辑中使用global $variable
来引用变量。但是,如果在函数或方法中包含剪切,则必须使该函数/方法中的变量全局化
答案 3 :(得分:0)
如果$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
的时间设置默认值。没有全局变量,没有超出范围变量。
答案 4 :(得分:0)
相反,您可以使用常量,如define('VARIALABLE','value')。您可以在文件中的任何位置使用
答案 5 :(得分:-1)
你在课堂上。这意味着包含的文件具有与包含它的代码行相同的变量范围。要解决这个问题,你需要做的就是把
global $variable;
在include之上。