php实现工厂模式&单例模式&魔术方法&获取文件扩展名
来源:互联网 发布:网上约车软件 编辑:程序博客网 时间:2024/06/09 17:02
/**
**用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));
}
0 0
- php实现工厂模式&单例模式&魔术方法&获取文件扩展名
- PHP单例模式与工厂模式
- PHP (单例模式与工厂模式)
- php-单例模式和工厂模式
- PHP工厂模式和单例模式
- 简单工厂模式 单例工厂模式 工厂方法模式 抽象工厂模式 原型模式
- 单例模式/工厂方法模式/抽象工厂模式
- 工厂方法模式、抽象工厂模式、单例模式
- 单例模式与工厂方法模式
- 单例模式、工厂模式、抽象模式、模板方法模式
- php设计模式工厂模式及单例模式
- php设计模式-单例模式-工厂模式
- php中的工厂模式、单例模式、注册模式
- PHP 单例模式 工厂模式 策略模式代码理解
- 魔术方法(__toString()+ __call()+ __clone() +__autoload())+单例模式
- php、java实现工厂方法模式
- php 工厂方法模式
- php工厂方法模式
- oracle基础sql语句
- php面试题
- PHP面试题及答案一
- PHP面试题及答案二
- tar命令
- php实现工厂模式&单例模式&魔术方法&获取文件扩展名
- InnoDB与Myisam的六大区别
- MySQL InnoDB之事务与锁详解
- Android SDK Manager 下载缓慢解决办法
- js prototype原形
- oracle 复合索引
- LeetCode 009 Palindrome Number
- 网站开发-php开发手机论坛(9)-分页显示评论
- uva 1156 - Pixel Shuffle(模拟+置换)