【问题标题】:PHP Concatenation to echo script inside of a ternaryPHP串联以在三元内回显脚本
【发布时间】:2014-06-14 10:43:29
【问题描述】:

我刚开始使用三元运算符,因为我觉得它们确实使我的代码看起来更整洁 - 但是今天我遇到了一个问题。

如果某个请求变量设置为 true(以减少对不需要的文件的 http 请求),我会尝试将一些脚本标签回显到我的标题中,但是每当我尝试加载我的页面时,我都会收到错误:

require_once(./public/lib/functions.js'></script>): 

^ 在上面的部分中,为什么浏览器会解释 html 编码的字符,为什么我丢失了我的 require 语句之前的 <script> 标签?

这是我正在使用的代码。

echo $ajax_required == true 
  ? "<script src='" . require_once(LIBRADIR . 'functions.js') . "'></script>" 
  : false;

提前致谢, 亚历克斯。

【问题讨论】:

  • 在我看来你真的不知道require_once 做了什么。将 JavaScript 文件包含到 PHP 文件中很可能不是您想要做的。并且请不要开始将三元运算符用于复杂的语句。代码质量太差了。
  • html_entity_decode(($ajax_required == true)) 的目的是什么???
  • 我认为使用三元运算符来处理不整洁的语句是见仁见智的问题。

标签: php ternary


【解决方案1】:

如果它只是一个.js 文件而不是.php 文件,那么您可能直接使用文件名作为字符串,而不是require()

echo html_entity_decode(($ajax_required == true)) 
  ? "<script src='" . LIBRADIR . "functions.js'></script>" 
  : false;

注意: require() 用于在代码中包含 .php 脚本,主要是为了重用现有代码(函数、类等)。

【讨论】:

  • 是的,你完全正确 - 完全忽略了 require 语句,谢谢
【解决方案2】:

目前评价为:

require_once(('index.php'). "'></script>")

您只需要另一个括号以获得更高的优先级:

(require_once('index.php'))
^                         ^
echo html_entity_decode((true == true)) 
  ? "<script src='" . (require_once('index.php')) . "'></script>" 
  : false;

Example on the Doc

还要记住require_oncerequire 是语言结构,您不需要将它们称为函数参数。上面的语句也可以这样写:

(require_once 'index.php')

【讨论】:

    【解决方案3】:

    require_once 绝对没有用,因为它用于 PHP 文件。我想你只是想这样做:

    echo $ajax_required? "<script src='" . LIBRADIR . "functions.js'></script>": "";
    

    这将只打印来自三元运算符的输出,即脚本标签或空字符串。

    【讨论】:

    • 是的,这正是我想做的,完全忽略了我将 reqire_once 放在声明中,代表我粗心 - 我会确保在我之前再读几次我的代码发布。
    • 是的,这发生在编码中。我想说您可以在诸如此类的特定要求中使用三元运算符,其中基于您只想回显或使用某些值的简单条件。如果您的 $ajax_required 变量具有 true 或 false,您也可以避免 == 检查,而只需像我在代码中所做的那样使用该值进行测试。
    • 再次感谢 Nitigya :),现在将整理我的代码部分!
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多