V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
VKMEPR
V2EX  ›  PHP

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

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

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

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

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

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

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

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

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

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