沉思录之二牛

2021-08-24 合山装修公司

PME模型

在大规模的程序设计中,组件(component)已经成为一种非常流行的技术。常见的组件技术都基于PME模型,即属性(Property)、方法(Method)和事件(Event)。

基于PME的组件技术可以方便地实现IoC(Inversion of Control,控制反转),是从IDE的plugin到应用服务器的“热发布”等许多技术的基础。

PHP从版本5开始,大大完善了对OO的支持,以前不能被应用的许多pattern现在都可以在PHP5中实现。因此,是否能够实现基于PHP的组件技术,也就成了一个值得讨论的问题。

下面对PHP对于PME模型的支持,逐一进行讨论:

#61548; 属性(Property)

PHP并不支持类似Delphi或者C#的property语法,但这并不是问题。Java也不支持property语法,但是通过getXXX()和setXXX()的命名约定,同样可以支持属性。

PHP也可以通过这一方式来支持属性。但是,PHP提供了另一种也许更好的方法,那就是__set()和__get()方法。

在PHP中,每一个class都会自动继承__set()和__get()方法。它们的定义如下:

void __set ( string name, mixed value )

mixed __get ( string name )

但这已是境外参加奥运会的最好成绩。更可贵的其中23金 这两个方法将在下列情况下被触发:当程序访问一个当前类没有显式定义的属性时。在这个时候,被访问的属性名称作为参数被传入相应的方法。任何类都可以重载__set()和__get()方法,以实现自己的功能。

如下例:

class PropertyTester {

public function __get($PropName) {

echo \"Getting Property $PropName\\n\";

}

public function __set($PropName, $Value) {

echo \"Setting Property $PropName to \'$Value\'\\n\";

}

}

$Prop = new PropertyTester();

$Prop-Name;

$Prop-Name = \"some string\";

类PropertyTester重载了__set()和__get()方法,为了测试,仅仅将参数打印输出,没有做更多的工作。测试代码创建了PropertyTester类的实例,并试图读写它并不存在的一个属性Name。此时,__set()和__get()相继被调用,并打印出相关参数。它的输出结果如下:

Getting Property Name

Setting Property Name to \'some string\'

江中黄芪生脉饮和好好黄芪颗粒哪个有优势
银川男性功能障碍治疗费用多少钱
来宾白癜风治疗费用
为你推荐