免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5376 | 回复: 6
打印 上一主题 下一主题

[对象] 奇怪的匿名类... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-05 21:57 |只看该作者 |倒序浏览
代码如下:

  1. [yarco@China ~]$ php -r '
  2. class foo
  3. {
  4.   function p()
  5.   {
  6.     print "yes, im here!\n";
  7.   }
  8. }

  9. (new foo())->p();
  10. '
  11. PHP Parse error:  parse error, unexpected T_OBJECT_OPERATOR in Command line code on line 10
  12. [yarco@China ~]$
复制代码

看起来php不支持匿名类的使用,但是我封装一下

  1. [yarco@China ~]$ php -r '
  2. class foo
  3. {
  4.   function p()
  5.   {
  6.     print "yes, im here!";
  7.   }
  8. }

  9. function create_object($class_name)
  10. {
  11.   return new $class_name();
  12. }

  13. create_object("foo")->p();
  14. '
  15. yes, im here!
  16. [yarco@China ~]$
复制代码

能使用了...真搞怪...

[ 本帖最后由 HonestQiao 于 2006-6-5 22:18 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2006-06-05 22:22 |只看该作者
foo::
这么做

论坛徽章:
0
3 [报告]
发表于 2006-06-05 22:24 |只看该作者
这么做是静态方法了啊.
偶这是产生了实例的.
(匿名对象?)


  1. [yarco@China project]$ cat 1.php
  2. <?php
  3.         class foo
  4.         {
  5.                 private $_item = "hello, world!\n";

  6.                 public static function p1()
  7.                 {
  8.                         print "hello, world!\n";
  9.                 }

  10.                 public function p2()
  11.                 {
  12.                         print $this->_item;
  13.                 }
  14.         }

  15.         foo::p1();
  16.         foo::p2();

  17. ?>[yarco@China project]$ php 1.php
  18. hello, world!
  19. PHP Fatal error:  Using $this when not in object context in /home/yarco/project/1.php on line 13
  20. [yarco@China project]$
复制代码

假如是成员函数就不行了啊

  1. [yarco@China project]$ cat 1.php
  2. <?php
  3.         class foo
  4.         {
  5.                 var $_item = "yes?";

  6.                 function bar()
  7.                 {
  8.                         print $this->_item;
  9.                 }
  10.         }

  11.         foo::bar();

  12. ?>[yarco@China project]$ php 1.php
  13. PHP Fatal error:  Using $this when not in object context in /home/yarco/project/1.php on line 8
  14. [yarco@China project]$
复制代码

但这种做法却没问题

  1. [yarco@China project]$ cat 1.php
  2. <?php
  3.         class foo
  4.         {
  5.                 var $_item = "yes?";

  6.                 function bar()
  7.                 {
  8.                         print $this->_item;
  9.                 }
  10.         }

  11.         ///foo::bar();
  12.         function create_object($foo)
  13.         {
  14.                 return new $foo();
  15.         }

  16.         create_object('foo')->bar();

  17. ?>[yarco@China project]$ php 1.php
  18. yes?[yarco@China project]$
复制代码

[ 本帖最后由 yarco2 于 2006-6-5 22:36 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2006-06-05 22:52 |只看该作者
应该说来,new算是语法结构,如果不结合=或者return,没有效果

论坛徽章:
0
5 [报告]
发表于 2006-06-06 08:51 |只看该作者
只不过是php语法解析器不能识别
(new foo())->p();
的表述而已,内部机制是存在的
return new $class_name();

create_object("foo")->p();
这样的写法是在php5才出现的

可以建议他们修改一下

论坛徽章:
0
6 [报告]
发表于 2006-06-06 09:57 |只看该作者
前些天的邮件列表上好像有提到php6中对于这部分的改进~~同时还包括namespace,__toString()等等~~

论坛徽章:
0
7 [报告]
发表于 2006-06-06 11:05 |只看该作者
LS的,贴一下呗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP