我有两个文件,如下面的
SomeClass.php
class SomeClass {
public function display() {
$content = file_get_contents("helloworld.php");
eval($content);
}
public function helloWorld() {
echo "hello World!";
}
}
helloworld.php
<?php
$this->helloWorld() ;
?>
<p>It's html expression</p>
如您所见,我尝试在display函数中执行helloworld.php。 当然,它会出现错误,因为html标签放在显示功能中。
有没有什么好方法可以在显示保存helloworld.php代码的显示函数中执行helloworld.php文本?
答案 0 :(得分:2)
如果您尝试在当前代码的上下文中执行特定文件,为什么不使用include
或require
?
请记住,如果eval
是答案,则问题是错误的。
如果确实想在这里使用eval
,
eval('?>' . $content);
应该有效。是的,你可以关闭并重新打开里面的PHP标签。这就是某些模板引擎的工作方式。
答案 1 :(得分:1)
您可以使用输出缓冲来捕获它。
ob_start();
include "helloworld.php";
$content = ob_get_contents();
ob_end_clean();
答案 2 :(得分:1)
除非你想进行字符串连接,否则无法做到这一点。
我通过对helloworld.php文件进行了一些小改动来测试它,因为它可以工作:
$this->helloWorld() ;
?><p>It's html expression</p>
这表明文本是原始运行的,就好像它包含在内一样。
现在,如果您不能或不能更改打开的<?php
标记,则可以采用以下两种方式之一。
简单方法(String Concatenation):
public function display() {
$content = file_get_contents("helloworld.php");
eval('?>' . $content); //append a php close tag, so the file looks like "?><?php"
}
更难的方式(String Replace):
public function display() {
$content = file_get_contents("helloworld.php");
//safely check the beginning of the file, if its an open php tag, remove it.
if('<?php' == substr($content, 0, 5)) {
$content = substr($content, 5);
}
eval($content);
}
答案 3 :(得分:0)