php生成对象吗,PHP生成对象的方法模式

/*

?* WEB开发笔记 www.chhua.com 每日练习 PHP 设计模式初级 PHP生成对象的方法

?*/

/*

?* 场景说明:老板,老板的方法——解雇员工,员工,员工作出反应

?*/

abstract class Employee {//员工的抽象基类

?protected $name;

?

?function __construct($name){//构造方法

??$this->name=$name;

?}

?

?abstract function fire();//抽象方法

}

class minion extends Employee{//员工的具体实现的子类

?function fire(){//覆写父类的抽象方法

??echo $this->name.”:我要起诉你!”;

?}

}

/*class NastyBoss {//角色为老板的类

?private $employees=array();//包含很多员工,数组内容为员工实例对象

?

?function addEmployess($employeeName){//添加员工方法

??$this->employees[]=new minion($employeeName);//每当添加就按照名字生成一个员工对象,放在员工数组里

?}

?

?function projectFails(){//老板的一个解雇方法

??if (count($this->employees)>0){//解雇最后一个加入的

???$emp=array_pop($this->employees);//得到最后一个加入的对象

???$emp->fire();//调用最后一个加入的员工的方法

??}

?}

}

$boss=new NastyBoss();//实例化老板

$boss->addEmployess(“BOB”);//加入一个员工

$boss->addEmployess(“MARY”);//加入一个员工

$boss->addEmployess(“Harry”);//加入一个员工

$boss->projectFails();*///Harry:我要起诉你!

/*

?*注:以上就是通过用PHP组合来实现多态的最简单的例子。

?*注意观察对象的生成和关系,类和类之后组合完成一个工作,但类和类之间又是相互独立的。

?*

?*然而以上的方法会出现一个问题,例如:不同的员工可能会有不同的方法和属性,那么就必须声明其它的类改造如下:

?*

?*/

class goto extends Employee {

?function fire(){

??echo $this->name.”:我直接走人!”;

?}

}

class NastyBoss {//角色为老板的类

?private $employees=array();//包含很多员工,数组内容为员工实例对象

?

?function addEmployess(Employee $employeeName){//添加员工方法,以对象当参数

??$this->employees[]=$employeeName;//每当添加就按照名字生成一个员工对象,放在员工数组里

?}

?

?function projectFails(){//老板的一个解雇方法

??if (count($this->employees)>0){//解雇最后一个加入的

???$emp=array_pop($this->employees);//得到最后一个加入的对象

???$emp->fire();//调用最后一个加入的员工的方法

??}

?}

}

$boss=new NastyBoss();//实例化老板

$boss->addEmployess(new minion(“BOB”));//加入一个员工

$boss->addEmployess(new goto(“MARY”));//加入一个员工

$boss->addEmployess(new minion(“Harry”));//加入一个员工

$boss->projectFails();//Harry:我要起诉你!

$boss->projectFails();//MARY:我直接走人!

?>

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

本文链接地址: PHP生成对象的方法模式 http://www.chhua.com/web-note767

相关笔记

更多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值