/**
** 用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));
}
** 用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));
}