关于 PHP 里面的 echo 一点小疑问

2017-05-06 16:06:10 +08:00
 543400

第一种方式:

	$txt=123;
	$txt1=array("a","b","c","d");
	
	echo $txt."<br/>";
	echo $txt1[1]."<br/>";  //注意"."这个拼接符
	
	print $txt."<br/>";
	print $txt1[2]."<br/>";	//注意"."这个拼接符

第二种方: $txt1="学习 PHP"; $txt2="RUNOOB.COM"; $cars=array("Volvo","BMW","Toyota");

	echo $txt1;
	echo "<br>";
	echo "在 $txt2 学习 PHP ";	//这个没有用拼接符
	echo "<br>";
	echo "我车的品牌是 {$cars[0]}";	//这个没有用拼接符,并且数组外面用了花括号

疑问:哪种更规范一点? 为什么要用花括号包住数组? 请求各路大神解答一下谢谢

2447 次点击
所在节点    PHP
12 条回复
sagaxu
2017-05-06 16:41:18 +08:00
都不规范,要用模板,不要自己拼
abcbuzhiming
2017-05-06 16:57:23 +08:00
echo "我车的品牌是 {$cars[0]}";
========
这种方式有问题,据我所知原生的 PHP 是没有这种东西的,除非你在用某种模板引擎比如 smarty,这是模板变量的写法
Mine
2017-05-06 17:07:38 +08:00
其实这玩意,只要功能达到了,个人开发规不规范都可以,团队协作的时候多写些注释还好。
不过还是第一种比较好,多用 . 来链接,这样变量和文字都能清晰的看出来,写在一起的话,单引号是不是解析变量的,要是报错了,找起来挺麻烦的。
Kilerd
2017-05-06 17:32:11 +08:00
@abcbuzhiming 不,可以在字符串中用 {} 来直接输出变量。
caola
2017-05-06 17:39:37 +08:00
第一种可以简化成:
$txt = 123;
$txt1 = ['a', 'b', 'c', 'd'];

echo $txt, '<br/>', $txt1[1], '<br/>', $txt, '<br/>', $txt1[2], '<br/>';

第二种可以简化成:
$txt1 = '学习 PHP';
$txt2 = 'RUNOOB.COM';
$cars = ['Volvo', 'BMW', 'Toyota'];

echo $txt1, '<br> 在 ', $txt2, ' 学习 PHP <br> 我车的品牌是 ', $cars[0];


一个合格的 php 程序猿,要遵守标准和与时俱进:

注意单双引号的用法,创建数组不建议使用 array() 和老版本 php。
能简则简,写那么多重复的 echo 有什么意思。
如看不惯一行过的 echo,那么可以在每个逗号换行。
jarlyyn
2017-05-06 18:38:14 +08:00
都不规范,规范的应该是 echo $output....

这不是抖机灵或者吐槽。

然后回到拼接字符串的问题。

这是两个方向的功能。

用. 链接是标准的字符串拼接。最常见的是用在各个函数的返回值的拼接上。

用$占位符是文本的替换,一般用在最终输出的模板上。

至于花括号,是为了更好的区分变量名和模板字符串,而不是靠程序自动判别。

如果是我的话。一般所有的变量都会用花括号。
vibbow
2017-05-06 19:45:19 +08:00
@abcbuzhiming
echo "我车的品牌是 {$cars[0]}"
这是原生用法
kookxiang
2017-05-06 20:53:51 +08:00
跟 echo 没有半毛钱关系,你用双引号引起来的内容会被解析,就算你不加花括号也一样会被解析,只是用了花括号就可以消除歧义并且提升下效率
可以去搜索下 php 里面双引号和单引号的区别就知道了
abcbuzhiming
2017-05-07 15:39:03 +08:00
@Kilerd
@vibbow 嗯,你们是对的,查了一下,大括号就是直接视为变量处理
miaotaizi
2017-05-07 21:45:01 +08:00
大括号什么时候变成模版引擎了…
byfar
2017-05-08 09:34:10 +08:00
两种用法都能实现功能,没有什么规范不规范吧,个人喜好问题。虽然我是乱说的

注意第二种方法用的是双引号,如果换成单引就不行,因为双引会对里面的字符串进行变量解析,花括号的作用是规定变量的界限。 比如:

$hello="hello ";
echo "$helloword"; // Notice: Undefined variable
echo PHP_EOL;
echo "{$hello}word"; // hello word

所以,如果不用界定符{} 变量解析时寻找分隔符来进行变量解析,比如 echo "$hello word"; // hello word

另外 heredoc 也可以实现变量解析,比如

echo PHP_EOL;
echo <<<'EOF'
{$hello}word
EOF;
// output {$hello}word, 功能同单引号


echo PHP_EOL;
echo <<<EOF
{$hello}word
EOF;
// output hello word,功能同双引号
543400
2017-05-08 19:47:33 +08:00
@caola
@jarlyyn
@byfar

非常感谢回答萌新的问题😋

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/359573

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX