【问题标题】:How to hold echo result in a variable without using echo or print in php?如何在不使用 php 中的 echo 或 print 的情况下将 echo 结果保存在变量中?
【发布时间】:2019-09-20 10:59:59
【问题描述】:

我正在通过循环作为字符串创建动态查询,并希望运行该查询并将结果保存在一个变量中,然后将该结果作为 json 返回以用于 ajax 目的。 但是,如果我回显停止进一步执行的查询并只返回查询本身,问题就在这里。

  $data = 'Share::all();';
  ob_start();
  echo $data; // stop executing here
  $returnData = ob_get_contents();
  ob_end_clean();
  return $returnData;

【问题讨论】:

  • 你似乎在echo $data。而$data 就是字符串'Share::all();'。你说的查询在哪里?
  • 嗯这看起来很有趣 04FS
  • Koala Yeung 我觉得你没明白我的意思
  • @mohsin:请让你的观点更容易理解。

标签: php eloquent


【解决方案1】:

直接雄辩的呼唤

我认为您实际上可能需要这一行而不是您编写的所有代码:

return Share::all()->toArray();

将一段 php 代码(即在您的情况下为 'Share::all();')打印为字符串不会执行代码。而且它肯定不会给你执行该代码的结果。

使用输出缓冲区

或者您可能想使用危险的eval 来解析代码的输出?在这种情况下:

$data = 'echo "hello world";';

$returnData = (function ($code) {
  ob_start();
  eval($code); // stop executing here
  return ob_get_clean();
})($data);

var_dump($returnData);

请注意,返回数据只能是字符串。它永远不能是纯字符串以外的任何东西。因此,如果您想通过输出缓冲区传递“查询结果”,这对我来说真的没有意义。

只需eval

你可能真的在考虑这个。

$data = 'return Share::all()->toArray();';
$returnData = eval($data);
var_dump($returnData);

但是你会得到使用现代命名空间 PHP 代码的实用结果。另外真的不推荐运行eval

【讨论】:

  • 不,亲爱的,对不起,这不是我问的,我认为 04FS 明白了我的意思。谢谢
  • 我有点怀疑。
猜你喜欢
  • 2014-02-26
  • 2021-03-15
  • 1970-01-01
  • 2011-04-02
  • 2020-02-13
  • 1970-01-01
  • 2016-05-26
  • 2019-08-10
  • 1970-01-01
相关资源
最近更新 更多