有点疑惑,经常在 php 文件里看到这样插入 html 代码块,请问这样是正确用法吗,有没有潜在的规范问题?
![]() | 1 VKMEPR OP 或者有没有其他更好的 html 代码插入方法? |
![]() | 2 lichao 2018-07-31 15:59:52 +08:00 <?php include 'my_js.php'; ?> |
![]() | 4 580a388da131 2018-07-31 16:08:15 +08:00 via iPhone ![]() 定界符 <<< |
5 helionzzz 2018-07-31 16:08:48 +08:00 混写倒是没什么 只是维护修改的时候可能会比较头疼 |
![]() | 6 580a388da131 2018-07-31 16:12:40 +08:00 via iPhone 正文的方法是最常见的,没啥问题。 大量的话现在一般用模版引擎。 |
![]() | 7 mhycy 2018-07-31 16:13:27 +08:00 PHP 支持这么做,只是 HTML 代码不是应该和 PHP 代码分离开来么? 至少放入到模板引擎才对 |
8 VKMEPR OP @580a388da131 知道<<<和 echo 可以插入。疑惑截图那种倒序闭合标签用法是否有副作用什么的 |
9 airdge 2018-07-31 16:14:42 +08:00 echo <<<EOT xxxxxxxx EOT; |
![]() | 10 VKMEPR OP |
11 airdge 2018-07-31 16:16:08 +08:00 echo <<<ABC xxxxxxxx ABC; |
13 ben1024 2018-07-31 16:20:14 +08:00 可以,但不建议 用个模板引引擎吧[blade,smarty,twig] |
![]() | 15 b821025551b 2018-07-31 16:22:08 +08:00 PHP 刚出来的时候就是这么用的,只是后来大伙越来越觉得难用,才拆分出来。只是目前来说,这种写法比较上古。 |
16 casztg 2018-07-31 16:24:16 +08:00 想当初大学里面作业就这样写 |
![]() | 17 898601566 2018-07-31 16:57:26 +08:00 @580a388da131 EOF 这个思路我是认同的 |
![]() | 18 1010011010 2018-07-31 17:03:32 +08:00 土味引用 |
![]() | 19 nash 2018-07-31 17:35:13 +08:00 不推荐 感觉还停留在五年前 首选各种模板引擎 退一万步 echo <<<EOT |
21 lookas2001 2018-07-31 17:54:45 +08:00 via Android 本来 php 就是这个样子的啊。只不过现在 php 越来越现代化这种用法慢慢变少了。 |
![]() | 22 zjsxwc 2018-07-31 19:10:21 +08:00 via iPhone 本来就不符合现在的规范,看看 psr 规范去 |
23 SimbaPeng 2018-07-31 19:39:46 +08:00 via Android 没人发现这个标记写反了么? |
![]() | 25 Mac 2018-07-31 19:42:02 +08:00 via Android 有时候只是要输出一个简单的 html,那这种方法也没什么不可以的,没必要上升到的非用模板不可的地步 |
26 SimbaPeng 2018-07-31 19:42:59 +08:00 via Android php 那个标记本来就是用来在 html 里插入 php 代码的 |
27 SimbaPeng 2018-07-31 19:48:42 +08:00 via Android 另外 php 本来就是一门没有规范的语言,那什么 psr 规范也不是官方的,官方的规范就是没有规范,随便你怎么写,233333 |
![]() | 28 dawniii 2018-07-31 20:04:04 +08:00 php 本身就是模板引擎,用先进的模板引擎,感觉就是在模板引擎上又造一套模板语言。感觉把原生的 php 写工整点也还行吧,不过现在都是前后端分离比较多。 |
![]() | 29 xhinliang 2018-07-31 22:59:51 +08:00 感觉回到了十年前。。。。 |
![]() | 30 akira 2018-07-31 23:08:47 +08:00 规范不规范不知道,我就想知道这样的代码怎么维护 |
![]() | 31 jswh 2018-07-31 23:28:55 +08:00 那些怎么维护的,你们都没用过 wordpress 嘛 |
![]() | 32 edsgerlin 2018-08-01 01:51:34 +08:00 开发过 WordPress 插件的表示这种写法很常见啊。 |
![]() | 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; |
![]() | 34 yangqi 2018-08-01 02:46:50 +08:00 @caola PSR 并没有规范这个,不加引号是 heredoc 语法,加引号是 nowdoc 的语法,php5.3 开始。两个都可以,没有本质区别。 |
![]() | 35 msg7086 2018-08-01 05:10:21 +08:00 @nash 5 年前过分了。这差不多是 15 年前流行的写法。 10 年前就流行 Smarty 了,5 年前都已经过渡到框架了。 |
![]() | 36 caola 2018-08-01 07:10:10 +08:00 @yangqi 加引单号不会解析内部的变量,不加或者加双引号是会解析的,在性能优化方面这点是要遵守的 证明你平时对单双引号的用法不注重, 然而在我们这里,对此严格要求,否则不给予提交到版本库里的代码通过 但凡你去看一些比较出名的,如 laravel,wordpress 等都会遵守 |
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 } ?> ``` |
![]() | 38 hanxiV2EX 2018-08-01 07:24:26 +08:00 via Android 要么模板,要么前后端分开 |
39 wulongqiu 2018-08-01 07:26:16 +08:00 现在一般使用模板引擎来处理界面渲染,要么前后端分离开发模式。 |
40 supereric 2018-08-01 08:52:26 +08:00 via Android ![]() 本身就是模板引擎,所谓的第三方模板引擎除了接口不会 php 也可以做模板外还有啥? <?=变量> 跟{变量} 没差别。 YII 了解一下 |
![]() | 41 jrient 2018-08-01 09:04:52 +08:00 看着不舒服 |
![]() | 42 imdong 2018-08-01 09:15:32 +08:00 PHP 原生支持语法,而且也是 PHP 的一个特色。 但是,由于太难用,也不好维护,这么写的人越来越少了。 |
![]() | 43 sujin190 2018-08-01 09:34:32 +08:00 其实我觉得问题在于,在现在比较完善的框架比如 laravel 中,只有在渲染模板阶段才生成 html,之后才输出到网络,你这样写,很有可能 html 并不会出现在你想要的位置,甚至会破坏 html 的结构 如果是模板渲染是调用的函数,那么 return 返回字符串就可以了,干嘛要协成这样呢 |
44 KgM4gLtF0shViDH3 2018-08-01 10:11:34 +08:00 @imdong #39 特别小的项目我还是喜欢一把梭。写起来比模板还自由一点。 |
![]() | 45 victoryss 2018-08-01 10:33:21 +08:00 根据实际情况来吧。单页、个人项目想怎么玩怎么玩,团队项目考虑可维护性。 |
![]() | 46 zlhsvc 2018-08-01 11:10:40 +08:00 写法没有任何问题,只是不利于维护 |
47 killerv 2018-08-01 11:20:18 +08:00 PHP 本来就是这么用的,现在的模板引擎只不过在那个基础上做了一些看起来比较“美观”的做法,其实底层实现还是这样。当然如果项目比较大,还是用模板引擎比较好管理。如果小项目这样写没什么问题。 |
![]() | 48 Clarencep 2018-08-01 11:22:27 +08:00 首先,从语法上是没有问题。但是,这样相当于直接 echo 了一小段 html 代码,即这个函数是有副作用的。 -- 有副作用的函数一定要谨慎使用。 我个人觉得最好使用 nowdoc/heredoc 的方式,然后通过 return 返回这段 HTML. 更灵活一些。当然 return 的话应该顺便改下函数名。 |
![]() | 50 bdnet 2018-08-01 15:40:36 +08:00 不好维护 +1 MVC 了解下 |