PHP 的花括号变量解析

2017-06-21 10:28:17 +08:00
 iguoji
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

2690 次点击
所在节点    程序员
18 条回复
FelixXie
2017-06-21 10:42:22 +08:00
$helloworld 没有定义啊。
klgd
2017-06-21 10:43:38 +08:00
你为什么要加“$”?
nullen
2017-06-21 10:44:07 +08:00
好像是楼主自己的锅?
mooncakejs
2017-06-21 10:44:59 +08:00
从 nodejs 过来的?
vus520
2017-06-21 10:47:17 +08:00
function foobar(){
echo "<hr />";
echo "hello world";
}

return 并不是输出,只是返回
iguoji
2017-06-21 10:47:48 +08:00
@FelixXie 我函数里返回的 hello world 是字符串啊,不是变量
iguoji
2017-06-21 10:49:27 +08:00
@klgd echo 输出里 $和{是配合一起使用的,如果缺少其中一个,输出的会直接是"{foobar()}",而没有将其解析
bombless
2017-06-21 10:50:25 +08:00
……你没看仔细吧
https://3v4l.org/EAgOC
iguoji
2017-06-21 10:51:10 +08:00
@vus520

官方代码例子有这么一行

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

但他没有给出具体`getName()`函数的定义,所以我认为这个函数会返回一个字符串,然后拼接在这整个 echo 语句中。
bombless
2017-06-21 10:53:45 +08:00
getName()返回的不是字符串,它返回的是一个本地变量的变量名
littleylv
2017-06-21 10:56:25 +08:00
楼主没有认真看手册的结果

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

function foo() {
return 'aa';
}

echo ${foo()}; // aaaa
因为 foo 返回的是 aa,所以打印的是$aa,即 aaaa,而不是打印'aa'
meanmachine
2017-06-21 10:57:25 +08:00
@iguoji 这将会返回一个变量名由 getName()返回值得到的的变量值
iguoji
2017-06-21 10:58:25 +08:00
@bombless
@littleylv

感谢,刚往后翻了下手册,原来这个官方叫法叫 可变变量。
mokeyjay
2017-06-21 10:58:36 +08:00
看起来你不知道 $$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
2017-06-21 10:59:21 +08:00
@iguoji 好吧。那理解错了。我以为你输出$helloworld。 你要输出字符串就不需要$了啊。
klgd
2017-06-21 11:12:06 +08:00
@bombless 涨姿势了 还有这样的 php 网站
hexiaolu
2017-06-21 17:47:05 +08:00
我就想知道,有哪个蛋疼的 phper 会这样用? 不把他喷死我就不是一个合格 html 工程师。
mingyun
2017-06-22 21:53:28 +08:00
这种特性工作中还是别用了

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

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

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

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

© 2021 V2EX