PHP 里这样插入 HTML 合乎规范吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
VKMEPR
V2EX    PHP

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

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

    有点疑惑,经常在 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 返回字符串就可以了,干嘛要协成这样呢
    KgM4gLtF0shViDH3
        44
    KgM4gLtF0shViDH3  
       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     Solana     2843 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 08:04 PVG 16:04 LAX 01:04 JFK 04:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86