V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
VKMEPR
V2EX  ›  PHP

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

  •  2
     
  •   VKMEPR · 2018-07-31 15:49:23 +08:00 · 5288 次点击
    这是一个创建于 2067 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    MVC 了解下
    yangqi
        51
    yangqi  
       2018-08-01 21:31:13 +08:00
    @caola 你是来搞笑的么,这个是 heredoc 和 nowdoc 的语法区别,和 php 的单引号双引号有个毛的关系。
    caola
        52
    caola  
       2018-08-02 03:42:05 +08:00
    @yangqi 难道我不知道 heredoc 和 nowdoc 的语法?你不清楚我的意思了吗???
    字符串(块)内部没有变量时,就不应该使用双引号(heredoc),这是性能问题,应当注重!注重!注重!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3320 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 13:36 · PVG 21:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.