PHP之所以被人称为“世界上最好的语言”,很大程度上是因为学会语法后就可以直接运用其开发Web应用了吧,而Java基本上不可能。在Java的语言特性的背后,还拖着由Sun公司和社区搞出的一大堆理论和框架,用以支撑所谓的“企业级开发”。有多少Java程序员终生淹没在“SSH”三大框架下,跳不出来。
这些理论,其实都很好,理论指导实践嘛!只是对于初学者来说,学习曲线比较陡峭。
JavaBeans是Java的JDK直接提供的一种组件式开发架构。具体的概念在此不详述了,有兴趣的直接看文档http://docs.oracle.com/javase/6/docs/api/java/beans/package-summary.html。
在该文档中,简要阐述了JavaBeans的概念。同时,根据包结构,我们可以初步分析一下如果要用PHP来实现这样一个特性,需要写哪些代码。
接口
| [AppletInitializer] | 此接口设计用于与 java.beans.Beans.instantiate 联合使用。 |
| [BeanInfo] | 希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类,该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。 |
| [Customizer] | customizer 类提供一个用来自定义目标 Java Bean 的完全自定义 GUI。 |
| [DesignMode] | 此接口由 java.beans.beancontext.BeanContext 的实例实现或委托,以便将当前的 "designTime" 属性传播到 java.beans.beancontext.BeanContextChild 实例的嵌套层次结构。 |
| [ExceptionListener] | ExceptionListener 是在发生内部异常时获得通知。 |
| [PropertyChangeListener] | 无论 bean 何时更改 "bound" 属性,都会激发一个 "PropertyChange" 事件。 |
| [PropertyEditor] | PropertyEditor 类为希望允许用户编辑某个给定类型的属性值的 GUI 提供支持。 |
| [VetoableChangeListener] | 只要 bean 更改 "constrained" 属性,都将会激发一个 VetoableChange 事件。 |
| [Visibility] | 在某些情况下,bean 可能运行在 GUI 不可用的服务器上。 |
类
| [BeanDescriptor] | BeanDescriptor 提供有关 "bean" 的全局信息,其中包括其 Java 类、其 displayName 等等。 |
| [Beans] | 此类提供一些通用的 bean 控制方法。 |
| [DefaultPersistenceDelegate] | DefaultPersistenceDelegate
是 PersistenceDelegate
抽象类的具体实现,是没有关于其可用信息的类在默认情况下使用的委托。 |
| [Encoder] | Encoder 是这样的类,它可用于创建根据其公共 API 对 JavaBeans 集合状态进行编码的文件或流。 |
| [EventHandler] | EventHandler
类为动态生成事件侦听器提供支持,这些侦听器的方法执行一条涉及传入事件对象和目标对象的简单语句。 |
| [EventSetDescriptor] | 描述给定 Java bean 激发的一组事件的 EventSetDescriptor。 |
| [Expression] | Expression
对象表示基本表达式,其中将单个方法应用于某一目标和一组参数,以返回结果,与在 "a.getFoo()"
中一样。 |
| [FeatureDescriptor] | FeatureDescriptor 类是 PropertyDescriptor、EventSetDescriptor 和 MethodDescriptor 等的公共基类。 |
| [IndexedPropertyChangeEvent] | 无论何时遵守 JavaBeans
| [IndexedPropertyDescriptor] | IndexedPropertyDescriptor 描述了类似数组行为的属性,且有一种访问数组特定元素的索引读和/或索引写方法。 |
| Introspector | Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。 |
| MethodDescriptor | MethodDescriptor 描述了一种特殊方法,即 Java Bean 支持从其他组件对其进行外部访问。 |
| ParameterDescriptor | ParameterDescriptor 类允许 bean 实现者提供除 java.lang.reflect.Method 类提供的低级别信息之外的关于其每个参数的额外信息。 |
| PersistenceDelegate | PersistenceDelegate 类负责根据类的公共 API 中的方法表示给定类的实例状态。 |
| PropertyChangeEvent | 无论 bean 何时更改 "bound" 或 "constrained" 属性,都会提交一个 "PropertyChange" 事件。 |
| PropertyChangeListenerProxy | 扩展 EventListenerProxy
的类,特别适用于添加指定的 PropertyChangeListener
。 |
| PropertyChangeSupport | 这是一个实用工具类,支持绑定 (bound) 属性的 bean 可以使用该类。 |
| PropertyDescriptor | PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。 |
| PropertyEditorManager | PropertyEditorManager 可用于查找任何给定类型名称的属性编辑器。 |
| PropertyEditorSupport | 这是一个帮助构建属性编辑器的支持类。 |
| SimpleBeanInfo | 这是一个使得用户提供 BeanInfo 类更容易的支持类。 |
| Statement | Statement
对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果,比如 "a.setFoo(b)"
。 |
| [VetoableChangeListenerProxy] | 扩展 EventListenerProxy
的类,特别适用于将 VetoableChangeListener
与 "constrained" 属性相关联。 |
| [VetoableChangeSupport] | 这是一个实用工具类,支持约束 (constrained) 属性的 bean 可以使用此类。 |
| [XMLDecoder] | XMLDecoder
类用于读取使用 XMLEncoder
创建的 XML 文档,用途类似于 ObjectInputStream
。 |
| [XMLEncoder] | XMLEncoder
类是 ObjectOutputStream
的互补替换,可用于生成 JavaBean 的文本表示形式,所使用方式与用 ObjectOutputStream
创建 Serializable
对象的二进制表示形式的方式相同。 |
异常
| [IntrospectionException] | 在 Introspection 期间发生异常时抛出异常。 |
| [PropertyVetoException] | 当某一属性的提议更改表示一个不可接受的值时,将抛出 PropertyVetoException。 |
注解类型
| [ConstructorProperties] | 关于构造方法的注释,用来说明该构造方法的参数如何与被构造对象的获取方法相对应。 |
参照这个结构,有没有兴趣实现一套PHPBeans?在正统的基于类的面向对象的思维下,语言的界限可以试着去消除,尤其PHP已经进步了这么多。
不知道markdown的表格语法为什么没有识别出来,效果有点差。