前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP 7 统一变量语法

PHP 7 统一变量语法

作者头像
博文视点Broadview
发布2020-06-11 16:12:14
4750
发布2020-06-11 16:12:14
举报

小编说:PHP 7具有很多用于编写高性能、高效代码的新特性,同时也移除了一些历史版本中过时的特性,这些过时的特性如果在PHP 7中使用会触发一个Error错误。本文将向大家介绍PHP 7 同一变量语法。 本文选自《高性能PHP 7》

我们常常会遇到这样的情况:方法、变量、类名等会被保存在某个变量里,例如下面这个例子。

$objects['class']->name;

在上面的代码中,$objects['class']会先被解析,之后name属性再被解析。就像代码顺序一样,通常由左至右被解析。

那么现在我们考虑一下如下情况。

$first = ['name' => 'second'];
$second = 'Howdy';echo $$first['name'];

在PHP 5.x版本中,这段代码会被顺利执行,并且输出Howdy。然而,这样的输出与前面看到的变量从左到右解析的原则产生了不一致。这是因为$first会优先被解析。那么,上面的代码解析情况就变成了{

echo ${$first['name']};

来看另外一个例子。

class Packt
{
   public $title = 'PHP 7';
   public $publisher = 'Packt Publisher';
   public function getTitle() : string
   {
       return $this->title;
   }   public function getPublisher() : string
   {
       return $this->publisher;
   }
}
$mthods = ['title' => 'getTitle', 'publisher' => 'getPublisher'];
$object = new Packt();
echo 'Book '.$object->$methods['title']().
  ' is published by '.$object->$methods['publisher']();

上面的代码在PHP 5.x版本中执行得很顺畅,并且会输出预期的结果。然而,在PHP 7环境下执行时,会产生Fatal级别错误。错误主要体现在最后一行,PHP 7会首先尝试解析object->

若想让这段代码在PHP 7中运行起来,需要做以下修改。

echo 'Book '.$object->{$methods['title']}().
  ' is published by '.$object->{$methods['publisher']}();

通过修改代码,我们就可以在PHP 7环境下得到预期的结果了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档