IImage--factory
<?php /* 实例4 */ /* 使用工厂类解析图像工作 */ interface IImage { function getWidth(); function getHeight(); function getData(); } class Image_PNG implements IImage { protected $_width, $height, $_data; public function __construct($file) { $this->_file = $file; $this->_parse(); } private function _parse() { //完成PNG格式的解析工作 //并填充$_width, $_height, $_data $this->_data = getimagesize($this->_file); list($this->_width, $this->_height) = $this->_data; } public function getWidth() { return $this->_width; } public function getHeight() { return $this->_height; } public function getData() { return $this->_data; } } class Image_JPGE implements IImage { protected $_width, $_height, $_data; public function __construct($file) { $this->_file = $file; $this->_parse(); } private function _parse() { //完成JPGE格式的解析工作 //并填充$_width, $_height, $_data //$this->_width = imagesx($this->_file); //$this->_height = imagesx($this->_file); $this->_data = getimagesize($this->_file); list($this->_width, $this->_height) = $this->_data; } public function getWidth(){ return $this->_width; } public function getHeight(){ return $this->_height; } public function getData() { return $this->_data; } } class ImageFactory { public static function factory($file) { $filename = pathinfo($file); switch(strtolower($filename['extension'])){ case 'jpg': $return = new Image_JPEG($file); break; case 'png': $return = new Image_PNG($file); break; default: echo '图片类型不正确'; break; } if($return instanceof IImage) { return $return ; } else { echo '出错了'; exit(); } } } $image = ImageFactory::factory('path/my.png'); var_dump($image->getWidth()); echo '<br>'; print_r($image->getheight()); echo '<br>'; print_r($image->getData());