将变量解析为echo字符串

时间:2012-03-16 18:22:46

标签: php echo fopen

我正在尝试将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?

4 个答案:

答案 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。