为什么通过方法传递的PHP代码块被注释掉(PHP7)?

时间:2017-09-06 06:43:33

标签: php html oop

我有这个testfile.php,我尝试通过包含PHP-Tags的代码块 但是当我这样做时,结果将最终发表评论 我还没有在文档中找到它,显然PHP在Apache上运行,否则我不会让这个类工作。

我想知道:为什么代码已被注释 如何以适当的方式解决?

更新:

使用eval()Asad Raza提供了一个工作解决方案,但它正在使用eval()。

 eval("?>". $string);

我有围绕代码的HTML(混合的php-html页面) 在现实生活中,我从数据库表中获取整个批次。

我需要完全按照原样通过它,并且eval不会被认为是最好的选择,因为我认为应该有一个更清洁的解决方案

结果不应该是纯文本的简单打印,而是执行的代码,例如就像一个类的实例化一样。

<?php

class Test
{

  public function __construct()
  {
  }

  public function getPHPCodeOne()
  {
    return  '<?php echo "Hi, I want to be PHP-Code"; ?>';
  }
  public function getPHPCodeTwo()
  {
    return  '<?php $fooClass = new className(); echo $fooClass->barMethod(); ?>';
  }
}

$test = new Test();
echo $test->getPHPCodeOne();
echo $test->getPHPCodeTwo();

会导致

<!--?php echo "Hi, I want to be PHP-Code"; ?-->
<!--?php $fooClass = new className(); echo $fooClass--->"barMethod(); ?>" 

但应该导致:

Hi, I want to be PHP-Code
I'am the Output of my flexible fooClass->barMethod.

2 个答案:

答案 0 :(得分:3)

您可以在此

中使用htmlentities
  

htmlentities - 将所有适用的字符转换为HTML实体

var service = new google.maps.places.PlacesService(map);
                service.nearbySearch({
                    location: theLocation.value,
                    radius: radius,
                    type: ['restaurant'], 
                    openNow: true,
                    minPriceLevel: minprice

                }, yourCallback);

甚至是htmlspecialchars这个

  

htmlspecialchars - 将特殊字符转换为HTML实体

type

查看the difference between htmlentities and htmlspecialchars

更新

因为您想要 执行 您的代码字符串,您需要使用eval

  

代码不得包装在打开和关闭PHP代码中,即   &#39;回声&#34;嗨!&#34;;&#39;必须通过而不是&#39;。它是   仍然可以离开并重新进入PHP模式虽然使用   适当的PHP标签

所以你想要评估你的代码字符串就是删除前导return htmlentities('<?php echo "Hi, I want to be PHP-Code"; ?>'); 开头标记,无论是从字符串中删除它,还是在你评估这个字符串时修剪它。

return  htmlspecialchars('<?php echo "Hi, I want to be PHP-Code"; ?>');

这将输出:

  

嗨,我想成为PHP-Code barMethod就在这里

答案 1 :(得分:1)

如果您的代码是

public function getPHPCode()
  {
    $date = date('Y-m-d');
    return  '<?php echo "Hi, I want to be PHP-Code $date"; ?>';
  }

如果你想从字符串执行你的PHP代码,并希望得到像这样的结果

Hi, I want to be PHP-Code 2017-9-6

然后使用eval

$test = new Test();
$string =  $test->getPHPCode();
eval($string); // output Hi, I want to be PHP-Code 2017-9-6

如果您希望您的字符串在浏览器上完全正确,例如输出(用于教程)

 $test = new Test();
 $string =  $test->getPHPCode();
 echo htmlentities($string); //output => <?php echo "Hi, I want to be PHP- $date"; ?>

更新:

$test = new Test();
 $string =  $test->getPHPCode();
 eval("?>". $string ."<?php"); 
 // end php tag ?> so current php close..
 //Then PHP start <?php  and end ?> from your string.
 // then now again start <?php so your normal code will work.

 It will generate code like this, in your case.
 <?php 
  $test = new Test();
  //your some code
 ?><?php echo "Hi, I want to be PHP-Code"; ?><?php
   //your more code
 ?>

无需像

那样回应
echo eval("?>". $string ."<?php");  // here echo is wrong.if echo inside string.