千家信息网

PHP面向对象程序设计之对象生成的示例分析

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章给大家分享的是有关PHP面向对象程序设计之对象生成的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:对象看个例子
千家信息网最后更新 2024年11月20日PHP面向对象程序设计之对象生成的示例分析

这篇文章给大家分享的是有关PHP面向对象程序设计之对象生成的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

具体如下:

对象

看个例子

name = $name;  }  abstract function fire();}class Minion extends Employee { // 奴隶 继承 雇员  function fire() {    print "{$this->name}: I'll clear my desk\n";  }}class NastyBoss { // 坏老板  private $employees = array();  function addEmployee( $employeeName ) { // 添加员工    $this->employees[] = new Minion( $employeeName ); // 代码灵活性受到限制  }  function projectFails() {    if ( count( $this->employees ) > 0 ) {      $emp = array_pop( $this->employees );      $emp->fire(); // 炒鱿鱼    }  }}$boss = new NastyBoss();$boss->addEmployee( "harry" );$boss->addEmployee( "bob" );$boss->addEmployee( "mary" );$boss->projectFails();// output:// mary: I'll clear my desk?>

再看一个更具有灵活性的案例

name = $name;  }  abstract function fire();}class Minion extends Employee {  function fire() {    print "{$this->name}: I'll clear my desk\n";  }}class NastyBoss {  private $employees = array();   function addEmployee( Employee $employee ) { // 传入对象    $this->employees[] = $employee;  }  function projectFails() {    if ( count( $this->employees ) ) {      $emp = array_pop( $this->employees );      $emp->fire();    }  }}// new Employee class...class CluedUp extends Employee {  function fire() {    print "{$this->name}: I'll call my lawyer\n";  }}$boss = new NastyBoss();$boss->addEmployee( new Minion( "harry" ) ); // 直接以对象作为参数,更具有灵活性$boss->addEmployee( new CluedUp( "bob" ) );$boss->addEmployee( new Minion( "mary" ) );$boss->projectFails();$boss->projectFails();$boss->projectFails();// output:// mary: I'll clear my desk// bob: I'll call my lawyer// harry: I'll clear my desk?>

单例

props[$key] = $val;  }  public function getProperty( $key ) {    return $this->props[$key];  }}$pref = Preferences::getInstance();$pref->setProperty( "name", "matt" );unset( $pref ); // remove the reference$pref2 = Preferences::getInstance();print $pref2->getProperty( "name" ) ."\n"; // demonstrate value is not lost?>

点评:不能随意创建对象,只能通过Preferences::getInstance()来创建对象。

工厂模式

getApptEncoder(); // 获取对象print $bloggs->encode();?>

output:

Appointment data encoded in BloggsCal format

进一步增加灵活性设置

mode = $mode;  }  function getHeaderText() {    switch ( $this->mode ) {      case ( self::MEGA ):        return "MegaCal header\n";      default:        return "BloggsCal header\n";    }  }  function getApptEncoder() {    switch ( $this->mode ) {      case ( self::MEGA ):        return new MegaApptEncoder();      default:        return new BloggsApptEncoder();    }  }}$man = new CommsManager( CommsManager::MEGA );print ( get_class( $man->getApptEncoder() ) )."\n";$man = new CommsManager( CommsManager::BLOGGS );print ( get_class( $man->getApptEncoder() ) )."\n";?>

output:

MegaApptEncoder
BloggsApptEncoder

工厂方法模式要把创建者类与要生产的产品类分离开来。

抽象工厂

通过抽象来来约束,成为一定的规矩。

getHeaderText();print $mgr->getApptEncoder()->encode(); // 对象调用方法,返回对象,继续调用方法。print $mgr->getFooterText();?>

output:

MegaCal header
Appointment data encoded in MegaCal format
MegaCal footer

更加牛逼的实现

getHeaderText();print $mgr->make( CommsManager::APPT )->encode();print $mgr->getFooterText();?>

output:

BloggsCal header
Appointment data encoded in BloggsCal format
BloggsCal footer

原型模式

改造成一个保存具体产品的工厂类。

sea = $sea;    $this->plains = $plains;    $this->forest = $forest;  }  function getSea( ) {    return clone $this->sea; // 克隆  }  function getPlains( ) {    return clone $this->plains;  }  function getForest( ) {    return clone $this->forest;  }}$factory = new TerrainFactory( new EarthSea(),  new EarthPlains(),  new EarthForest() );print_r( $factory->getSea() );print_r( $factory->getPlains() );print_r( $factory->getForest() );?>

output:

EarthSea Object()EarthPlains Object()EarthForest Object()

感谢各位的阅读!关于"PHP面向对象程序设计之对象生成的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0