[PHP] 对象的属性

原创 2004年10月05日 17:02:00
在 PHP4 中,自定义的对象是没有属性的。 
我们要么用一个字段来替代属性,但是无法控制对象的使用者是否能够修改这些字段的值。
代码:

如果用函数调用替代属性,虽然可以实现“只读属性的效果”,但对于可读可写的属性来说就要增加相应的读取函数和写入函数。

代码:


这样总是不直观,而且代码也不容易维护。

所以我设计了一个 ObjectProperties 型别,试图模拟对象属性。



使用上面的 ObjectProperties 就可以实现这样的效果:

代码: 

这一切看上去很美!

很不幸,这种方式有几个严重的缺陷:
1、由于采用了 overload() 提供的重载机制模拟对象的属性,因此访问对象的属性时实际上就会调用该对象的 __get() 或者 __set() 函数。如果进行大量这样的属性访问操作,效率毫无疑问比使用成员变量低得多。

2、也许 PHP4 的 overload() 设计上有一些缺陷。当我们试图将一个 overload 化了(也就是对该型别调用了 overload() 函数)的对象的【引用】赋值给另一个 overload 化对象的成员变量时,PHP4 会报告错误。

3、此外,如果在多重继承中应用 overload(),会导致 PHP 运行环境出错。

看来这种方式也只能作为一个试验,实际应用还是不行的。至于 PHP5 会不会有后面两个问题,我没有测试过。

PHP获取对象属性的三种方法

今天查看yii源码,发现yii\base\Model中的attribute()方法是通过反射获取对象的public non-static属性。记得以前看到的代码都是用get_object_vars()...
  • chunyuan314
  • chunyuan314
  • 2017年02月21日 10:26
  • 1307

php 类 对象 属性 方法

一、创建类和对象 用户定义的类,也是学好PHP所必备的条件之一。PHP中的类和其他的面向对象语言中的类比较起来,相对比较简单。PHP只有类(class)、方法(method)、属性以及单一继承(ex...
  • u012767263
  • u012767263
  • 2013年11月28日 11:00
  • 1848

以变量名的值去访问php对象的属性

不能$x[’s’]这样访问,关联数组才能这样访问。
  • THEANARKH
  • THEANARKH
  • 2017年02月21日 23:36
  • 487

php 获取对象所有属性(仅公有属性)

有的情况下我们会想要获取对象的所有属性,可以处理如下:   1)仅仅获取公有属性 要点:函数get_object_vars($instance) 实现: function get_obj...
  • wkupaochuan
  • wkupaochuan
  • 2013年04月27日 16:15
  • 9128

php 给对象动态增加属性

示例代码
  • acmer1183
  • acmer1183
  • 2015年04月29日 17:36
  • 7290

PHP实现对象属性按数组方式访问

主要思路实现ArrayAccess接口和__get,__set魔术方法 class ArrObject implements ArrayAccess { private $_data; ...
  • guiyecheng
  • guiyecheng
  • 2016年07月13日 15:18
  • 3054

php对象属性读写

读取对象的属性 ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int nam...
  • zkaipmoo
  • zkaipmoo
  • 2014年01月11日 13:23
  • 1380

property_exists 检查对象或类是否具有该属性

bool property_exists ( mixed $class , string $property ) 1.class myClass {     public $mine;     ...
  • sanbingyutuoniao123
  • sanbingyutuoniao123
  • 2016年05月04日 16:48
  • 4455

php面向对象之——类的定义和属性方法的调用

/** * 1. 类的定义以class关键字开始,后面跟着这个类的名称。类的名称命名通常每个单词的第一个字母大写。 * 2. 定义类的属性 * 3. 定义类的方法 * 4. 实例化类的...
  • lingjiphp
  • lingjiphp
  • 2016年02月08日 03:47
  • 2523

php中foreach遍历类对象的总结

foreach 遍历数组很常见,同样foreachye'ke
  • fanyilong_v5
  • fanyilong_v5
  • 2014年09月02日 17:58
  • 5937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[PHP] 对象的属性
举报原因:
原因补充:

(最多只允许输入30个字)