VKMEPR
V2EX  ›  PHP

PHP 里这样插入 HTML 合乎规范吗?

  •  2
     
  •   VKMEPR · Jul 31, 2018 · 6888 views
    This topic created in 3025 days ago, the information mentioned may be changed or developed.

    有点疑惑,经常在 php 文件里看到这样插入 html 代码块,请问这样是正确用法吗,有没有潜在的规范问题?

    2018-07-31_154221.png
    52 replies  •  2018-08-02 03:42:05 +08:00
    VKMEPR
    VKMEPR
    OP
    Jul 31, 2018
    1
    或者有没有其他更好的 html 代码插入方法?
    lichao
    lichao
    Jul 31, 2018
    2
    <?php include 'my_js.php'; ?>
    VKMEPR
    VKMEPR
    OP
    Jul 31, 2018
    3
    @lichao 只插入少量代码另建文件太麻烦了
    580a388da131
    580a388da131
    Jul 31, 2018 via iPhone❤️1
    4
    定界符 <<<
    helionzzz
    helionzzz
    Jul 31, 2018
    5
    混写倒是没什么 只是维护修改的时候可能会比较头疼
    580a388da131
    580a388da131
    Jul 31, 2018 via iPhone
    6
    正文的方法是最常见的,没啥问题。
    大量的话现在一般用模版引擎。
    mhycy
    mhycy
    Jul 31, 2018
    7
    PHP 支持这么做,只是 HTML 代码不是应该和 PHP 代码分离开来么?
    至少放入到模板引擎才对
    VKMEPR
    VKMEPR
    OP
    Jul 31, 2018
    8
    @580a388da131 知道<<<和 echo 可以插入。疑惑截图那种倒序闭合标签用法是否有副作用什么的
    airdge
    airdge
    Jul 31, 2018
    9
    echo <<<EOT
    xxxxxxxx
    EOT;
    VKMEPR
    VKMEPR
    OP
    Jul 31, 2018
    10
    @helionzzz
    @580a388da131
    哦,那就好,不懂 php 语法。。
    airdge
    airdge
    Jul 31, 2018
    11
    echo <<<ABC
    xxxxxxxx
    ABC;
    flowfire
    flowfire
    Jul 31, 2018
    12
    @VKMEPR #8 不是倒叙闭合标签,意思是告诉 php 引擎,从这里开始不归你负责了
    ben1024
    ben1024
    Jul 31, 2018
    13
    可以,但不建议
    用个模板引引擎吧[blade,smarty,twig]
    VKMEPR
    VKMEPR
    OP
    Jul 31, 2018
    14
    @flowfire 感谢各大佬解答!
    b821025551b
    b821025551b
    Jul 31, 2018
    15
    PHP 刚出来的时候就是这么用的,只是后来大伙越来越觉得难用,才拆分出来。只是目前来说,这种写法比较上古。
    casztg
    casztg
    Jul 31, 2018
    16
    想当初大学里面作业就这样写·····
    898601566
    898601566
    Jul 31, 2018
    17
    @580a388da131 EOF 这个思路我是认同的
    1010011010
    1010011010
    Jul 31, 2018
    18
    土味引用
    nash
    nash
    Jul 31, 2018
    19
    不推荐 感觉还停留在五年前 首选各种模板引擎 退一万步 echo <<<EOT
    annielong
    annielong
    Jul 31, 2018
    20
    没有模板的时代都是这样做的,cgi,asp,asp.net 刚开始都这么搞
    lookas2001
    lookas2001
    Jul 31, 2018 via Android
    21
    本来 php 就是这个样子的啊。只不过现在 php 越来越现代化这种用法慢慢变少了。
    zjsxwc
    zjsxwc
    Jul 31, 2018 via iPhone
    22
    本来就不符合现在的规范,看看 psr 规范去
    SimbaPeng
    SimbaPeng
    Jul 31, 2018 via Android
    23
    没人发现这个标记写反了么?
    SimbaPeng
    SimbaPeng
    Jul 31, 2018 via Android
    24
    @SimbaPeng 看错了,当我没说
    Mac
    Mac
    Jul 31, 2018 via Android
    25
    有时候只是要输出一个简单的 html,那这种方法也没什么不可以的,没必要上升到的非用模板不可的地步
    SimbaPeng
    SimbaPeng
    Jul 31, 2018 via Android
    26
    php 那个标记本来就是用来在 html 里插入 php 代码的
    SimbaPeng
    SimbaPeng
    Jul 31, 2018 via Android
    27
    另外 php 本来就是一门没有规范的语言,那什么 psr 规范也不是官方的,官方的规范就是没有规范,随便你怎么写,233333
    dawniii
    dawniii
    Jul 31, 2018
    28
    php 本身就是模板引擎,用先进的模板引擎,感觉就是在模板引擎上又造一套模板语言。感觉把原生的 php 写工整点也还行吧,不过现在都是前后端分离比较多。
    xhinliang
    xhinliang
    Jul 31, 2018
    29
    感觉回到了十年前。。。。
    akira
    akira
    Jul 31, 2018
    30
    规范不规范不知道,我就想知道这样的代码怎么维护
    jswh
    jswh
    Jul 31, 2018
    31
    那些怎么维护的,你们都没用过 wordpress 嘛
    edsgerlin
    edsgerlin
    Aug 1, 2018
    32
    开发过 WordPress 插件的表示这种写法很常见啊。
    caola
    caola
    Aug 1, 2018
    33
    echo <<<'EOT' //如果以下内容中没有变量,请使用单引号才符合 psr 规范
    xxxxxxxx
    EOT;

    也可以写成变量:
    $add_my_js = <<<'EOT'
    xxxxxxxx
    EOT;

    echo $add_my_js;
    yangqi
    yangqi
    Aug 1, 2018
    34
    @caola PSR 并没有规范这个,不加引号是 heredoc 语法,加引号是 nowdoc 的语法,php5.3 开始。两个都可以,没有本质区别。
    msg7086
    msg7086
    Aug 1, 2018
    35
    @nash 5 年前过分了。这差不多是 15 年前流行的写法。
    10 年前就流行 Smarty 了,5 年前都已经过渡到框架了。
    caola
    caola
    Aug 1, 2018
    36
    @yangqi 加引单号不会解析内部的变量,不加或者加双引号是会解析的,在性能优化方面这点是要遵守的
    证明你平时对单双引号的用法不注重,
    然而在我们这里,对此严格要求,否则不给予提交到版本库里的代码通过

    但凡你去看一些比较出名的,如 laravel,wordpress 等都会遵守
    wulongqiu
    wulongqiu
    Aug 1, 2018
    37
    这是 PHP 函数的基本结构和用法。
    PHP 圣经里是这样写的“在一个函数中,花括号包括了完成所要求任务的代码。在花括号中,可以包含任何在 PHP 脚本的其他地方都合法的代码,其中包括函数调用、新变量或函数声明、require() 或者 include 语句、类声明以及 HTML 脚本”。
    给出的示例是:
    ```
    <?php
    function my_function() {
    ?>
    My Function was called
    <?php
    }
    ?>
    ```
    hanxiV2EX
    hanxiV2EX
    Aug 1, 2018 via Android
    38
    要么模板,要么前后端分开
    wulongqiu
    wulongqiu
    Aug 1, 2018
    39
    现在一般使用模板引擎来处理界面渲染,要么前后端分离开发模式。
    supereric
    supereric
    Aug 1, 2018 via Android❤️1
    40
    本身就是模板引擎,所谓的第三方模板引擎除了接口不会 php 也可以做模板外还有啥?

    <?=变量> 跟{变量} 没差别。

    YII 了解一下
    jrient
    jrient
    Aug 1, 2018
    41
    看着不舒服
    imdong
    imdong
    Aug 1, 2018
    42
    PHP 原生支持语法,而且也是 PHP 的一个特色。
    但是,由于太难用,也不好维护,这么写的人越来越少了。
    sujin190
    sujin190
    Aug 1, 2018
    43
    其实我觉得问题在于,在现在比较完善的框架比如 laravel 中,只有在渲染模板阶段才生成 html,之后才输出到网络,你这样写,很有可能 html 并不会出现在你想要的位置,甚至会破坏 html 的结构
    如果是模板渲染是调用的函数,那么 return 返回字符串就可以了,干嘛要协成这样呢
    KgM4gLtF0shViDH3
    KgM4gLtF0shViDH3
    Aug 1, 2018
    44
    @imdong #39 特别小的项目我还是喜欢一把梭。写起来比模板还自由一点。
    victoryss
    victoryss
    Aug 1, 2018
    45
    根据实际情况来吧。单页、个人项目想怎么玩怎么玩,团队项目考虑可维护性。
    zlhsvc
    zlhsvc
    Aug 1, 2018
    46
    写法没有任何问题,只是不利于维护
    killerv
    killerv
    Aug 1, 2018
    47
    PHP 本来就是这么用的,现在的模板引擎只不过在那个基础上做了一些看起来比较“美观”的做法,其实底层实现还是这样。当然如果项目比较大,还是用模板引擎比较好管理。如果小项目这样写没什么问题。
    Clarencep
    Clarencep
    Aug 1, 2018
    48
    首先,从语法上是没有问题。但是,这样相当于直接 echo 了一小段 html 代码,即这个函数是有副作用的。

    -- 有副作用的函数一定要谨慎使用。

    我个人觉得最好使用 nowdoc/heredoc 的方式,然后通过 return 返回这段 HTML. 更灵活一些。当然 return 的话应该顺便改下函数名。
    wekw
    wekw
    Aug 1, 2018
    49
    @zjsxwc 兄弟,你暴露了,你是最无知的那个。
    bdnet
    bdnet
    Aug 1, 2018
    50
    不好维护 +1

    MVC 了解下
    yangqi
    yangqi
    Aug 1, 2018
    51
    @caola 你是来搞笑的么,这个是 heredoc 和 nowdoc 的语法区别,和 php 的单引号双引号有个毛的关系。
    caola
    caola
    Aug 2, 2018
    52
    @yangqi 难道我不知道 heredoc 和 nowdoc 的语法?你不清楚我的意思了吗???
    字符串(块)内部没有变量时,就不应该使用双引号(heredoc),这是性能问题,应当注重!注重!注重!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4742 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 128ms · UTC 06:11 · PVG 14:11 · LAX 22:11 · JFK 01:11
    ♥ Do have faith in what you're doing.