找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2082|回复: 1

[教程] PHP5.4新特性-解引用实例化

[复制链接]
发表于 2013-4-11 11:18:10 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
在以前的PHP中, 我们并不能直接去操作一个对象实例化的结果:
            show(); //PHP Parse error: syntax error, unexpected T_OBJECT_OPERATOR
            我们只能, 把实例化结果先保存起来, 然后再调用:
            $a = new Foo();$a->show();
            关于这个改进, 已经有很多人提出过request, 但是因为实现的问题, 一直没有加入PHP.
            这点上, 我解释下, PHP的语法分析系统, 是一个历史悠久的系统, 在这个蛮长的的历史中, 不停的修修补补, 或多或少的会造成一些特定的特性. 而如果要重写, 继耗时, 又耗力, 并且很难做到和现在的完全兼容, 所以我想, 要完全重写, 那也只能是PHP6了(替开发组宣布一下, PHP6目前已经停止开发, 也暂时不会有这种提法)
            而, 如果采用修补的方式, 就会引入一个无法解决的移近/归约冲突, 我之前也尝试过实现这个特性, 但是因为遇到这个问题, 所以没有提交..
            不过, 随着对这个特性要求的增多, 慢慢的, 大家觉得, 即使多一个移近/归约冲突,,,, 也没啥吧. 嘿嘿, 所以呢:
            现在, 这个特性终于在Felipe(Instance and method call/property access)的工作下, 得到了支持, 现在我们就可以书写如下的语法了:
            bar()(new $foo())->bar(new $bar->y)->x(new foo)[0]
            你也许注意到了, 所有的实例化式都需要用括号括起来, 是的, 如果不这样, 那么首先, 会有如下的冲突语法:
            new $bar->y->x;
            此时, 就会有矛盾, 到底是(new $bar)->y呢, 还是(new $bar->y)->x呢.
            另外一个原因, 也是因为PHP目前的语法系统, 如果采用不加括号的做法, 那么就会更多的引入一个移近/归约冲突.
            不过我相信这个括号也没什么, 起码看起来也更清晰一些.
            说到这里, 插个题外话, 我很好奇, C++的语法分析, 那得有多少已知的无法解决的"移近/归约"冲突啊, 有知道的朋友么? 呵呵.
            目前, 5.4RC1已经发布, 大家有兴趣的, 可以提早试用, 也帮PHP做做测试:) PHP 5.4RC1, enjoy!
            不过, 还是要提醒下: PHP 5.4还处于开发阶段, 在最终release之前, 任**特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
            谢谢

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2013-4-11 12:45:37 | 显示全部楼层 来自 中国–北京–北京
不错,不错,值得鼓励,楼主加油

评分

参与人数 1金币 +5 收起 理由
抢楼评分专号 + 5 很幸运,你获得了抢楼奖励!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 16:41 , Processed in 0.038954 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表