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

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

  •  
  •   543400 · 2017-05-06 16:06:10 +08:00 · 2415 次点击
    这是一个创建于 2751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一种方式:

    	$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]}";	//这个没有用拼接符,并且数组外面用了花括号
    

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

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

    这不是抖机灵或者吐槽。

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

    这是两个方向的功能。

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

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

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

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

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

    $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
        12
    543400  
    OP
       2017-05-08 19:47:33 +08:00 via Android
    @caola
    @jarlyyn
    @byfar

    非常感谢回答萌新的问题😋
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   951 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.