两例在PHP5多态方法分享
在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的值,字符串对象,资源,等等。我们不能说多态性在PHP5中的变量。我们只能说,在PHP5中,多态性应用于方法参数的类型的尖端位置。
任何类的子类对象都可以满足当前类型作为类型提示的类型要求。
实现这个接口的所有类都可以满足由接口类型所提示的方法参数需求。
总之,一个类有它的父类,以及已实现接口的标识。
通过实现接口实现多态性
复制代码代码如下所示:
< PHP
接口用户/用户界面
公共职能getName();
公共职能setName($ _name);
}
类用户实现用户{ / /接口。
私有名称;
公共职能getName(){
返回$这个名称;
}
公共职能setName($ _name){
美元->名称= $ _name;
}
}
类useradmin { / /操作。
公共静态函数changeusername(用户_user美元,美元_username){
_user美元-> setName($ _username);
}
}
NormalUser()美元=新用户;
UserAdmin::changeusername($用户、汤姆); / /来这里是NormalUser的一个实例。
echo $用户-> getName();
>
使用接口和组合模拟实现多重继承
多重继承是通过组合来模拟的。
如果我们有一种通过使用多类方法实现代码重用的方法,就不支持PHP中的多重继承。
这是组合。在一个类中,另一个类被设置为属性。
下面的示例是对多重继承的模拟。
接口实例
写一个概念性的例子。我们设计了一个在线销售系统,设计的用户部分如下:用户分为,NormalUser,VipUser,inneruser三。它需要计算用户的价格根据用户不同的折扣购买产品,需要延长保持预留空间给未来。
复制代码代码如下所示:
< PHP
用户界面
{
公共职能getName();
公共职能setName($ _name);
公共功能getdiscount();
}
抽象类abstractuser实现用户
{
私有名称;
受保护的折扣= 0;
受保护的$ ;
功能__construct($ _name){
美元-> setName($ _name);
}
功能getName(){
返回$这个名称;
}
功能集名称(美元_name){
美元->名称= $ _name;
}
功能getdiscount(){
退货折扣;
}
功能getgrade(){
返回$;
}
}
类用户延伸abstractuser
{
受保护的折扣= 1;
受保护的$;
}
类vipuser延伸abstractuser
{
受保护的折扣= 0.8;
保护$级=vipuser ;
}
类inneruser延伸abstractuser
{
受保护的折扣= 0.7;
保护$级=inneruser ;
}
产品接口
{
getproductname()函数;
getproductprice()函数;
}
接口书扩展产品
{
()函数getauthor;
}
bookonline工具书类
{
私人产品的美元;
美元的价格保护;
受保护的$作者;
功能__construct($ _bookname){
美元-> ProductName = $ _bookname;
}
功能getproductname(){
返回这个->产品名称;
}
功能getproductprice(){
美元->产品价格= 100;
返回这个->产品价格;
}
公共职能getauthor(){
美元->作者=晨飞;
返回$ >作者;
}
}
类productsettle
{
公共静态函数finalprice(用户_user美元,产品_product美元,美元数){
美元美元价格= _user -> getdiscount()* $ _product -> getproductprice()* $号;
退货价格;
}
}
$ = 10;
$书=新bookonline(设计模式);
为用户=新NormalUser(汤姆);
美元价格= productsettle::(用户finalprice美元,美元美元的书,数量);
你好,尊敬。为用户-> getName()。
str -你的水平。($用户-> getgrade);
str -你的折扣。($用户-> getdiscount);
你的价格是美元;
回声$;
>