• 请不要在回答技术问题时复制粘贴 AI 生成的内容
iguoji
V2EX  ›  程序员

PHP 的花括号变量解析

  •  
  •   iguoji · Jun 21, 2017 · 3167 views
    This topic created in 3268 days ago, the information mentioned may be changed or developed.
    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 replies    2017-06-22 21:53:28 +08:00
    FelixXie
        1
    FelixXie  
       Jun 21, 2017
    $helloworld 没有定义啊。
    klgd
        2
    klgd  
       Jun 21, 2017
    你为什么要加“$”?
    nullen
        3
    nullen  
       Jun 21, 2017
    好像是楼主自己的锅?
    mooncakejs
        4
    mooncakejs  
       Jun 21, 2017 via iPhone
    从 nodejs 过来的?
    vus520
        5
    vus520  
       Jun 21, 2017
    function foobar(){
    echo "<hr />";
    echo "hello world";
    }

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

    官方代码例子有这么一行

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

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

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

    function foo() {
    return 'aa';
    }

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

    感谢,刚往后翻了下手册,原来这个官方叫法叫 可变变量。
    mokeyjay
        14
    mokeyjay  
       Jun 21, 2017   ❤️ 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  
       Jun 21, 2017
    @iguoji 好吧。那理解错了。我以为你输出$helloworld。 你要输出字符串就不需要$了啊。
    klgd
        16
    klgd  
       Jun 21, 2017
    @bombless 涨姿势了 还有这样的 php 网站
    hexiaolu
        17
    hexiaolu  
       Jun 21, 2017
    我就想知道,有哪个蛋疼的 phper 会这样用? 不把他喷死我就不是一个合格 html 工程师。
    mingyun
        18
    mingyun  
       Jun 22, 2017
    这种特性工作中还是别用了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   952 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 93c8b4a0 · 64ms · UTC 21:58 · PVG 05:58 · LAX 14:58 · JFK 17:58
    ♥ Do have faith in what you're doing.