php变量访问,PHP 通过名称动态访问变量(变量)

示例

可以通过动态变量名称访问变量。变量的名称可以存储在另一个变量中,从而可以动态访问它。这样的变量称为变量变量。

要将变量转换为变量变量,请$在变量前面放置一个多余的内容。

$variableName = 'foo';

$foo = 'bar';

// The following are all equivalent, and all output "bar":

echo $foo;

echo ${$variableName};

echo $$variableName;

//similarly,

$variableName  = 'foo';

$$variableName = 'bar';

// 以下语句也将输出“ bar”

echo $foo;

echo $$variableName;

echo ${$variableName};

变量变量对于映射函数/方法调用很有用:

function add($a, $b) {

return $a + $b;

}

$funcName = 'add';

echo $funcName(1, 2); // 输出3

这在PHP类中特别有用:

class myClass {

public function __construct() {

$functionName = 'doSomething';

$this->$functionName('Hello World');

}

private function doSomething($string) {

echo $string; // Outputs "Hello World"

}

}

可能但不必须$variableName介于两者之间{}:

${$variableName} = $value;

以下示例是等效的,并输出“ baz”:

$fooBar = 'baz';

$varPrefix = 'foo';

echo $fooBar;               // Outputs "baz"

echo ${$varPrefix . 'Bar'}; // Also outputs "baz"

{}仅当变量名称本身是表达式时才使用,例如:

${$variableNamePart1 . $variableNamePart2} = $value;

但是,建议始终使用{},因为它更具可读性。

虽然不建议这样做,但是可以将以下行为链接起来:

$$$$$$$$DoNotTryThisAtHomeKids = $value;需要注意的是,许多开发人员认为过度使用变量变量是一种不良做法。由于它们不适合现代IDE进行静态分析,因此带有许多变量(或动态方法调用)的大型代码库很快会变得难以维护。

PHP5和PHP7之间的区别

始终使用{}或的另一个原因()是,PHP5和PHP7处理动态变量的方式略有不同,这在某些情况下会导致不同的结果。

在PHP7中,现在将严格按照从左到右的顺序对动态变量,属性和方法进行评估,而不是在PHP5中混合特殊情况。以下示例显示了评估顺序如何变化。

情况1 : $$foo['bar']['baz']PHP5解释: ${$foo['bar']['baz']}

PHP7解释: ($$foo)['bar']['baz']

情况2: $foo->$bar['baz']PHP5解释: $foo->{$bar['baz']}

PHP7解释: ($foo->$bar)['baz']

情况3: $foo->$bar['baz']()PHP5解释: $foo->{$bar['baz']}()

PHP7解释: ($foo->$bar)['baz']()

情况4: Foo::$bar['baz']()PHP5解释: Foo::{$bar['baz']}()

PHP7解释: (Foo::$bar)['baz']()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值