PHP 的花括号变量解析 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
iguoji

PHP 的花括号变量解析

  •  
  •   iguoji 2017 年 6 月 21 日 3079 次点击
    这是一个创建于 3229 天前的主题,其中的信息可能已经有所发展或是发生改变。
    function foobar(){ echo "<hr />"; return "hello world"; } echo <<<TOKEN <p> 第一种:${foobar()} </p> <p> 第二种:{${foobar()}} </p> TOKEN; 

    输出结果为:

    <hr /><hr /> <p> 第一种: </p> <p> 第二种: </p> 

    请问我returnhello world哪里去了?

    官方 复杂(花括号)语法 的代码例子中有这么调用过: http://php.net/manual/zh/language.types.string.php

    18 条回复    2017-06-22 21:53:28 +08:00
    FelixXie
        1
    FelixXie  
       2017 年 6 月 21 日
    $helloworld 没有定义啊。
    klgd
        2
    klgd  
       2017 年 6 月 21 日
    你为什么要加“$”?
    nullen
        3
    nullen  
       2017 年 6 月 21 日
    好像是楼主自己的锅?
    mooncakejs
        4
    mooncakejs  
       2017 年 6 月 21 日 via iPhone
    从 nodejs 过来的?
    vus520
        5
    vus520  
       2017 年 6 月 21 日
    function foobar(){
    echo "<hr />";
    echo "hello world";
    }

    return 并不是输出,只是返回
    iguoji
        6
    iguoji  
    OP
       2017 年 6 月 21 日
    @FelixXie 我函数里返回的 hello world 是字符串啊,不是变量
    iguoji
        7
    iguoji  
    OP
       2017 年 6 月 21 日
    @klgd echo 输出里 $和{是配合一起使用的,如果缺少其中一个,输出的会直接是"{foobar()}",而没有将其解析
    bombless
        8
    bombless  
       2017 年 6月 21 日   2
    ……你没看仔细吧
    https://3v4l.org/EAgOC
    iguoji
        9
    iguoji  
    OP
       2017 年 6 月 21 日
    @vus520

    官方代码例子有这么一行

    ```php
    echo "This is the value of the var named by the return value of getName(): {${getName()}}";
    ```

    但他没有给出具体`getName()`函数的定义,所以我认为这个函数会返回一个字符串,然后拼接在这整个 echo 语句中。
    bombless
        10
    bombless  
       2017 年 6 月 21 日   1
    getName()返回的不是字符串,它返回的是一个本地变量的变量名
    U7Q5tLAex2FI0o0g
        11
    U7Q5tLAex2FI0o0g  
       2017 年 6 月 21 日   1
    楼主没有认真看手册的结果

    $aa = 'aaaa';
    $bb = 'bbbb';

    function foo() {
    return 'aa';
    }

    echo ${foo()}; // aaaa
    因为 foo 返回的是 aa,所以打印的是$aa,即 aaaa,而不是打印'aa'
    meanmachine
        12
    meanmachine  
       2017 年 6 月 21 日 via Android   1
    @iguoji 这将会返回一个变量名由 getName()返回值得到的的变量值
    iguoji
        13
    iguoji  
    OP
       2017 年 6 月 21 日
    @bombless
    @littleylv

    感谢,刚往后翻了下手册,原来这个官方叫法叫 可变变量。
    mokeyjay
        14
    mokeyjay  
       2017 年 6 月 21 日   1
    看起来你不知道 $$var 的用法。
    $a = 'b';
    $b = '233';
    echo $$a; // output: '233'

    同理,你的 foobar()应该返回一个变量名。例如你首先要定义:
    $hello_world = 'Hello World';

    然后再定义一个函数返回这个 变量名 :
    function footbar(){ return 'hello_world'; }

    最后再:
    echo <<<EOT
    <p> 第二种:{${footbar()}} </p>
    EOT;

    这样才能输出你想要的结果
    FelixXie
        15
    FelixXie  
       2017 年 6 月 21 日
    @iguoji 好吧。那理解错了。我以为你输出$helloworld。 你要输出字符串就不需要$了啊。
    klgd
        16
    klgd  
       2017 年 6 月 21 日
    @bombless 涨姿势了 还有这样的 php 网站
    hexiaolu
        17
    hexiaolu  
       2017 年 6 月 21 日
    我就想知道,有哪个蛋疼的 phper 会这样用? 不把他喷死我就不是一个合格 html 工程师。
    mingyun
        18
    mingyun  
       2017 年 6 月 22 日
    这种特性工作中还是别用了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4616 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 04:05 PVG 12:05 LAX 21:05 JFK 00:05
    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