如何将php代码编写为字符串?

时间:2016-12-05 06:30:15

标签: php string laravel

我有这段代码:

<?php $myarray->appends(['action' => $_GET['desc']])->render() ?>

如果网址中有action参数,那么我的代码也能正常运行。否则会抛出此错误消息:

  

未定义的索引:action(查看:   /var/www/html/myweb/resources/views/mypage.blade.php)

所以我需要动态地执行此操作->appends(['action' => $_GET['desc']])。像这样:

<?php
  if ( isset($_GET['desc']) ) {
      $append_param = "->appends(['action' => $_GET['desc']])";
  } else {
       $append_param = "";
  }

  $myarray.$append_param->render();
?>

但我非常确定我的代码无法正常工作......我戴的代码只是为了向您展示我的观点。

无论如何,任何人都可以告诉我如何以正确的方式做到这一点?

我试图做的就是:将action参数附加到分页链接(如果它已经存在)。否则我不想追加它。

3 个答案:

答案 0 :(得分:0)

您永远不应该从用户可控制的来源获取输入并执行它。这样做是一个主要的安全风险,它可能会在您的服务器中打开更多的安全漏洞,而不是在一生中进行补丁。

如果你真的必须这样做,你可以使用eval()。但请,请确保您了解此安全隐患。

答案 1 :(得分:0)

我认为你只是在彻底地思考整个局势。 必须将代码放在字符串中以有条件地执行它,您只需将其编写为代码本身。

没有关于你的班级内部如何运作的更多信息,最直接和最基本的方式是:

if ( isset($_GET['desc']) ) {
    $myarray->appends(['action' => $_GET['desc']])->render()
} else {
    $myarray->render();
}

答案 2 :(得分:-1)

你做不到。

首先,如果要检查数组中的有效键,请使用“array_key_exists(key,array)”,这是非常推荐的。

if(array_key_exists('dec',$ _ GET)){

然后,如果我理解,你想将数据“附加”到数组?这意味着为此数组中的键添加值。 这可以通过PHP轻松完成: $ array [$ key] = $ value;

对变量名称要非常小心: $ $ myArray的&append_param- GT;渲染(); 这没有任何意义,如果它是一个数组,你只应该使用[](或数组函数),但如果它是一个对象,你只能使用 - &gt;在它上面。