我正在尝试将PHP变量用于回显文件,并且无法在最初使用该脚本时遇到麻烦:
$head = new mod_head("head.php");
$id="ASDSSgdfsfsdfS";
echo $head;
mod_head类:
class mod_head
{
private $out="";
function __construct($arg)
{
$this->out=$this->parts($arg);
}
public function __toString()
{
return $this->out;
}
private function parts($file)
{
return fread(@fopen(PATH . "parts/".$file, 'r'), filesize(PATH . "parts/".$file));
}
}
,文件是“head.php”
<h1><center style="background:orange; border-radius:15px;">LOGO</center></h1>
<br><?php print_r($id)?>
<div>BANNER <div>$id <?php echo $id ;?></div></div>
我不想创建全局变量,为什么它会回显$ id var?
答案 0 :(得分:2)
首先,您需要解析文件,而不仅仅是阅读它。您将遇到的第二个问题是范围问题。 $id
超出了parts()
函数的范围。为了返回所需文件的内容而不是仅仅打印它,我使用了output control functions
尝试将您的零件功能更改为:
private function parts($file)
{
ob_start();
require(PATH . "parts/".$file);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
要解决范围问题,请尝试将$id="ASDSSgdfsfsdfS";
更改为$head->id = "ASDSSgdfsfsdfS";
,然后将head.php更改为以下内容:
<h1><center style="background:orange; border-radius:15px;">LOGO</center></h1>
<br><?php print_r($this->id)?>
<div>BANNER <div>$id <?php echo $this->id ;?></div></div>
答案 1 :(得分:1)
简单地用fread读取文件不会解析里面包含的任何PHP。也许你正在寻找类似的东西:
http://php.net/manual/en/function.require.php
使用require()基本上就像直接在require()语句所在的位置复制和粘贴所需文件。这意味着所需文件只能使用require()语句所在范围内的变量。
答案 2 :(得分:0)
因为您正在阅读head.php
的内容并逐字回复它们;没有地方让PHP编译并将该文件作为代码运行。您可以使用include('head.php')
执行此操作,但这不会盲目地工作,因为您必须确保$id
在范围中{{1} }。
然而,这并不像听起来那么容易,因为不可能自动“打包整个本地范围”以供以后使用,因为自动隐含了函数内部的代码,并且调用该函数的行为会导致范围发生变化。
答案 3 :(得分:0)
我的想法是你可能正在使用mod_head传入一个php文件,所以它可以用作视图,对吗?
如果是这种情况,通常还有一种方法可以包含一个变量,以便它存在于另一个文件head.php中......因为没有一个,你需要为它创建一个方法。然后将该内容变为包含或要求。
如果没有,而你只是加载文件,那么关于fread not parsing的其他评论是完全正确的,你将无法从其他文件中简单地访问$ id。