[PHP] 对象的属性

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

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

代码:

 
  
 
  

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

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

 
  
 
  

 
  
 
  
 
  
 
  
 
  

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

代码: 
 
  
 
  

这一切看上去很美!

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

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

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

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

你可能感兴趣的:(PHP)