php常用魔术方法

class Ceshi{
    public $array;

    /*
     * 对一个不存在的属性进行赋值时,触发此方法
     * */
    function __set($name, $value)
    {
        // TODO: Implement __set() method.
        $this->array[$name] = $value;

    }

    /*
     * 获取一个不存在的属性时,触发此方法 …
more ...

php观察者模式

当发生一个事件后,可能需要执行多种业务的逻辑操作,这里的每一种逻辑都是一个观察者。


观察者基类

abstract class EventGenerator{
    private $observers = [];//观察者对象数组

    /*
     * 添加观察者
     * */
    function addObserver(Observer $observer){
        $this->observers[] = $observer;
    }

    /*
     * 通知观察者
     * */
    function …
more ...

php简单工厂模式

有个Databases类,传统用法是,哪里需要,哪里new Databases;;这样若Databases对象发生了改变,则有实例化Databases的地方都要相应改变。

采用工厂模式实现:

/*
*工厂模式
**/
class Factory{
    static function …
more ...

php数据映射模式

获取用户id为$id的用户对象

/*
*数据映射模式
**/
class User{
    //这里的id,name,age属性和数据库中的字段相对应
    public $id;
    public $name;
    public $age;
    protected $db;

    function __construct($id)
    {
        $this …
more ...

php策略模式

需求:对于不同的用户展示不同的内容


定义接口

interface UserStrategy{
    function showAd();//展示广告
    function showCategory();//展示分类
}

普通用户展示的内容

class CommonUser implements UserStrategy{
    public function showAd()
    {
        // TODO …
more ...

php适配器模式

像thinkphp,执行一个数据库查询操作;

D('User')->field('id,name')->where(['age'=>['lt',18]])->order('age desc')->select();

无论你是使用pdo或是mysqli还或是 …

more ...

php注册树模式

一个对象,可能很多地方需要用到;每用到一次,就new一次,浪费资源。通过注册器模式,初始化的时候注册对象,往后就可以直接获取注册器中的对象,而不用再new。 1. 注册器类

/*
*注册树模式
**/
class Register{
    protected static $objects;//对象数组

    /*
     * 注册对象
     * */
    static …
more ...

php单例模式

通过单例模式获取Databases对象

class Databases
{
    protected $db;//保存当前对象

    private function __construct()
    {
        //私有的构造方法,意在禁止外部直接new Databases()
    }

    /*
     * 实现单列模式
     * 若需要调用对象,则通过下面方法调用
     * */
    static function getDatabases …
more ...