【PHP5权威指南】读书心得二——高级面向对象编程和设计模式
来源:互联网 发布:捷通人才系统源码 编辑:程序博客网 时间:2024/04/30 09:33
1、使用数组语法访问的重载——ArrayAccess(数组式访问)接口
ArrayAccess{/* 方法 */abstract public boolean offsetExists ( mixed $offset )abstract public mixed offsetGet ( mixed $offset )abstract public void offsetSet ( mixed $offset, mixed $value )abstract public void offsetUnset ( mixed $offset )}
官方提供了以上接口,自己使用时需要实现
class MyClass implements ArrayAccess{static private $config;private $config_array;private function __construct(){$this->config_array = array("mikercal" => "male");}public static function instance(){if( self::$config == NULL ){self::$config = new MyClass();}return self::$config;}public function offsetExists($name){return isset($this->config_array[$name]);}public function offsetGet($name){return $this->config_array[$name];}public function offsetSet($name, $value){$this->config_array[$name] = $value;}public function offsetUnset($name){unset($this->config_array[$name]);}}$config = MyClass::instance();echo $config["mikercal"];$config["Tom"] = "male";echo $config["Tom"];2、迭代器
一个对象的属性可以用foreach()循环进行迭代循环
Iterator extends Traversable{/* 方法 */abstract public mixed current ( void )abstract public scalar key ( void )abstract public void next ( void )abstract public void rewind ( void )abstract public void boolean valid ( void )}
官方提供了以上接口,自己使用时需要实现
设计模式——观察者模式
class NumberSquare implements Iterator{private $cur,$start,$end;public function __construct($start, $end){$this->start = $start;$this->end = $end;}//重新把迭代器指向列表的开始处public function rewind(){$this->cur = $this->start;}//检查当前位置是否有效public function valid(){return $this->cur <= $this->end;}//返回当前元素的值public function current(){return pow($this->cur, 2);}//向下移动到下一个元素public function next(){$this->cur++;}//返回当前元素的键public function key(){return $this->cur;}}$num = new NumberSquare(2, 8);foreach( $num as $key=>$value ){echo "The square of $key is $value<br>";}
3、设计模式——单例模式
class Logger{static private $instance;static function instance(){if( self::$instance == NULL ){self::$instance = new Logger();}return self::$instance;}private function __construct(){}private function __clone(){}public function Log($str){}}Logger::instance()->Log("backup");
设计模式——工厂模式
abstract class User{function __construct($name){$this->name = $name;}function getName(){return $this->name;}function hasReadPermission(){return true;}function hasModifyPermission(){return false;}function hasDeletePermission(){return false;}protected $name = NULL;}class GuestUser extends User{}class CustomUser extends User{function hasModifyPermission(){return true;}}class AdminUser extends User{function hasModifyPermission(){return true;}function hasDeletePermission(){return true;}}class UserFactory{private static $user = array("Andi" => "admin","mikercal" => "custom","Tom" => "guest");static function Create($name){if( !isset(self::$user[$name]) ){echo "user doesn't exist";return false;}switch( self::$user[$name] ){case 'guest':return new GuestUser($name);break;case 'custom':return new CustomUser($name);break;case 'admin':return new AdminUser($name);break;}}}function boolToStr($bool){if( $bool == false ){return "No<br>";}else{return "Yes<br>";}}function displayPermission(User $obj){echo $obj->getName()."'s permission:<br>";echo "Read:".boolToStr( $obj->hasReadPermission() );echo "Modify:".boolToStr( $obj->hasModifyPermission() );echo "Delete:".boolToStr( $obj->hasDeletePermission() );}$login = array( "Tom","mikercal","Andi");foreach($login as $v){displayPermission(UserFactory::Create($v));}上述例子中,建立了一个基类User,三个子类GusetUser、CustomUser、AdminUser;使用UserFactory类来根据用户身份创建合适的用户对象
设计模式——观察者模式
class ExchangeRate{private $observer;private $exchage_rate;static public $instance;static public function instance(){if( self::$instance == NULL ){self::$instance = new ExchangeRate();}return self::$instance;}public function addObserver(Observer $obj){$this->observer[] = $obj;}public function setExchageRate($new_rate){$this->exchange_rate = $new_date;$this->notify();}public function notify(){foreach($this->observer as $obj){$obj->update($this);}}} class Observer{private $observerName;public function __construct($observerName){$this->observerName = $observerName;ExchangeRate::instance()->addObserver($this);}public function update(ExchangeRate $obj){echo $this->observerName." update success!<br>";}}$p1 = new Observer("Tom");$p2 = new Observer("Jerry");ExchangeRate::instance()->setExchageRate(9.4);
- 【PHP5权威指南】读书心得二——高级面向对象编程和设计模式
- 【PHP5权威指南】读书心得一——基础语言部分
- C语言面向对象编程——读书《C嵌入式设计模式》
- Android编程权威指南-----(二)Android与MVC设计模式
- 面向对象的设计(二)——C++高级编程
- Javascript权威指南与高级编程要点记录(二)
- Android编程权威指南(第二版)学习笔记(二)—— 第2章 Android 与 MVC 设计模式
- JavaScript面向对象设计二——构造函数模式
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现)
- 【面向对象设计模式】 适配器模式 (二)
- 面向对象编程和设计模式的七大原则理解
- 面向对象的设计(一)——C++高级编程
- 面向对象和设计模式
- 面向对象编程心得
- 面向对象和高级编程 20151212
- 面向对象高级(二)
- 面向程序员的设计模式 ——GoF《设计模式》读书总结(零)
- Java基础(面向对象二——static关键字、主函数定义和单例设计模式)
- 浅谈OCR之Tesseract
- x86处理器中的AX BX与CX DX寄存器
- Python 学习第一天
- Oracle的JDBC驱动的版本
- Java操作Hbase2
- 【PHP5权威指南】读书心得二——高级面向对象编程和设计模式
- hdu1828线段树+扫描线
- ASP.NET性能优化之构建自定义文件缓存
- IOS开发(91)之ZBar 条形码二维码扫描控件
- NDK Command
- Remainder Calculator-指数循环结+欧拉函数
- linux C之rename() & remove()
- Java操作Hbase3
- 数据库权限设计—学习