很难说这里问的是什么。这个问题是模棱两可的,模糊的,不完整的,过于广泛的,或修辞,不能合理地回答其目前的形式。有关澄清此问题以便重新打开的帮助,请访问visit the help center。
11年前关闭。
今天我在www.example上看到一篇文章 www.example.com ,我在这里引用:
$Bar = "a";
$Foo = "Bar";
$World = "Foo";
$Hello = "World";
$a = "Hello";
$a; //Returns Hello
$$a; //Returns World
$$$a; //Returns Foo
$$$$a; //Returns Bar
$$$$$a; //Returns a
$$$$$$a; //Returns Hello
$$$$$$$a; //Returns World
由于PHP的语法继承自C++,美元符号不会让您想起指针吗?
string bar = "a";
string *foo = &bar;
string **world = &foo;
string ***hello = &world;
string ****a = &hello;
就像指针一样,当你定义$a = 'var'
和$var = 'test'
,然后你做$$a
,你使用$a
的值指向$var
,这有点像C指针只使用字符串而不是内存地址。
那么PHP中的美元符号可以和C指针相关吗?
4条答案
按热度按时间7ajki6be1#
PHP是从C++派生出来的。..
***停止。***这种想法只会给你带来痛苦和痛苦。Perl, LPC, Lua, Pike, Ada 95, Java, PHP, D, C99, C#, and Falcon也都是从C派生的,对于“派生”的一些定义,我可以向你保证它们的行为与C完全不同,当然也不像C++那样使用。相似之处是表面上的,语义上是完全不同的。
在上面提供的例子中,它更类似于JavaScript这样的语言,在这个意义上,你可以解析和取消引用一个变量名 *,只要给出一个字符串 *。在C中,仅仅知道变量的名称并不允许对变量进行解引用。您需要的是它的内存地址(因此使用
&
运算符)。这是关键的区别。我认为最明显的误解是你的问题的这一部分:
就像指针一样,当你定义$a = 'var'和$var = 'test',然后你执行$$a时,你使用$a的R值指向$var,这就像C指针一样。
这不是解释,没有捕捉到关于指针的整个画面。我想你是在说这样的事情:
PHP:
C++:
两者之间最大的区别是C的
a
包含var
变量的 * 内存地址 *,而不是包含变量var
名称的字符串。它更像reflection,而不是其他任何东西,C肯定没有标准的reflection,因此不能简单地取消引用一个只有字符串名称的变量。
the PHP documentation for variable variables:
有时候,能够有变量名是很方便的。也就是说,是一个可以动态设置和使用的变量名。[强调我的]
如果C++有这样的功能,它会更像这样:
这与简单的指针解引用非常不同,因为指针不保存字符串,它们保存内存地址。即使你shouldn't be using pointers in your code anyway除了在非常特殊的情况下。
h43kikqp2#
这与指针无关。它更像是reflection的一个示例,通过它,一段字符串变成了代码。C++没有这样的反射。
在PHP中可以使用反射:解释器在程序执行时运行,因此可以将字符串作为一段代码反馈回解释器。
waxmsbnn3#
我不认为这和指针有关。http://www.php.net/manual/en/language.variables.variable.php
变量变量不寻址内存地址,但解析用于保存php变量的结构中的名称。
blmhpbnm4#
指针只包含地址,这里你使用一个变量作为你想访问的另一个变量的“名字”。.