您的位置:首页 > 编程语言 > PHP开发

php实现工厂模式&单例模式&魔术方法&获取文件扩展名

2014-08-13 11:09 741 查看
/**

**用php实现工厂模式

*/

//抽象产品

interface Work{

public function doWork();

}

//具体产品实现

class Student implements Work{

function doWork(){

echo "学生写作业\n";

}

}

class Teacher implements Work{

function doWork(){

echo "老师批改作业\n";

}

}

//抽像工厂

interface WorkerFactory{

public function getWorker();

}

//具体抽象工厂实现

class StudentFactory{

function getWorker(){

return new Student();

}

}

class TeacherFactory{

function getWorker(){

return new Teacher();

}

}

//客户端

class Client{

static function main(){

$s=new Student();

$s->doWork();

$t=new Teacher();

$t->doWork();

}

}

Client::main();

/**

* 设计模式之单例模式

* $_instance必须声明为静态的私有变量

* 构造函数和析构函数必须声明为私有,防止外部程序new

* 类从而失去单例模式的意义

* getInstance()方法必须设置为公有的,必须调用此方法

* 以返回实例的一个引用

* ::操作符只能访问静态变量和静态函数

* new对象都会消耗内存

* 使用场景:最常用的地方是数据库连接。

* 使用单例模式生成一个对象后,

* 该对象可以被其它众多对象所使用。

*/

class danLi{

//保存类实例的静态成员变量

private static $_instance;

//private标记的构造方法

private function __construct(){

echo "This a Constructed Method;";

}

//创建__clone方法防止对象被复制克隆

private function __clone(){

trigger_error('Clone is not arrow!',E_USER_ERROR);

}

//单例方法,用于访问实例的公共的静态方法

public static function getInstance(){

if(self::$_instance instanceof self){

self::$_instance=new self;

}

return self::$_instance;

}

public function test(){

echo "测试调用成功";

}

}

//用new实例化private标记构造函数的类会报错

//$danli = new Danli();

//正确方法,用双冒号::操作符访问静态方法获取实例

$danLi=danLi::getInstance();

$danLi->test();

//复制(克隆)对象将导致一个E_USER_ERROR

$danli_clone=clone $danLi;

/**

*写出一些php魔术方法

*/

__construct(), __destruct(), __call(), __get(), __set(), __isset(),__unset(),__sleep(), __wakeup(),__toString(),__clone()

/**

*写一个php函数,尽可能高效的,从一个url中提取出文件的扩展名。

*$url=http://eladies.sina.com.cn/qg/2013/0811/06461231319.shtml

*/

function get_extend($url){

return end(explode('.',$url));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: