12. 程序扩展性

来源:互联网 发布:2017年6月房地产数据 编辑:程序博客网 时间:2024/05/17 12:21

这里写图片描述


1.模块化
这里写图片描述

yii 模块化的实现
这里写图片描述
这里写图片描述
这里写图片描述

配置文件:
这里写图片描述
这里写图片描述

通过控制器访问:
这里写图片描述
这里写图片描述

通过 浏览器直接访问:
这里写图片描述

再生成子模块下的子模块:
这里写图片描述

开启子模块可以放父模块里配置:
这里写图片描述
这里写图片描述


2.事件机制
这里写图片描述

1.扫描式2.绑定式(触发:trigger(),绑定: on())

这里写图片描述

<?phpnamespace vendor\animal;use \yii\base\Component;use \yii\base\Event;class MyEvent extends Event{    public $message;}class Cat extends Component{    public function shout()    {        echo 'miao,miao<br/>';        $me = new MyEvent();        $me->message = 'hello, my event<br/>';        $this->trigger('miao', $me);    }}

这里写图片描述

<?phpnamespace vendor\animal;use \yii\base\Component;class Dog{    public function look()    {        echo 'i am looking <br/>';    }}

这里写图片描述

<?phpnamespace vendor\animal;class Mourse{    public function run($e)    {        echo 'i am run<br/>';        echo $e->message,'<br/>';    }}

这里写图片描述

<?phpnamespace app\controllers;use yii\web\Controller;use vendor\animal\Cat;use vendor\animal\Mourse;use vendor\animal\Dog;use \yii\base\Event;class AnimalController extends Controller{    public function actionIndex()    {        //单例模式        \Yii::$app->on(\yii\base\Application::EVENT_AFTER_REQUEST, function(){            echo '<br/>响应之后';        });        $cat = new Cat();        $cat2 = new Cat();        $mourse = new Mourse();        $dog = new Dog();       // $cat->on('miao', [$mourse, 'run']);       // $cat->on('miao', [$dog, 'look']);        // 类级别的事件绑定,对类的每个实例都有效//        Event::on(Cat::className(), 'miao', [$mourse, 'run']);        Event::on(Cat::className(), 'miao', function(){            echo 'miao 事件被触发';        });        //取消关注        //$cat->off('miao', [$mourse,'run']);        $cat->shout();        // 第二只Cat 没有反应        $cat2->shout();    }}

这里写图片描述


3.Mixin

1. 类的混合2. 对象的混合

这里写图片描述

1. 类的混合<?phpnamespace app\behaviors;use yii\base\Behavior;class Behavior1 extends Behavior{    public $height;    protected $height1;    public function eat()    {        echo 'dog eat';    }    public function events()    {        // 接收 'wang' 事件,触发 shout 方法        return [            'wang' => 'shout'        ];    }    public function shout($events)    {        echo 'wang, wang, wang<br/>';    }}

这里写图片描述

<?phpnamespace vendor\animal;use app\behaviors\Behavior1;use yii\base\Component;class Dog extends Component{    public function behaviors()    {        return [            Behavior1::className()        ];    }    public function look()    {        echo 'i am looking <br/>';    }}
public function actionTest()    {        $dog = new Dog();        $dog->look();        $dog->eat();        $dog->height = '18cm';        //不能访问 protected ,private       // $dog->height1 = 'aaa';        echo '<br/>',$dog->height;       // echo '<br/>',$dog->height1;        $dog->trigger('wang');    }

2. 对象的混合
这里写图片描述

<?phpnamespace app\behaviors;use yii\base\Behavior;class Behavior1 extends Behavior{    public $height;    protected $height1;    public function eat()    {        echo 'dog eat';    }    public function events()    {        // 接收 'wang' 事件,触发 shout 方法        return [            'wang' => 'shout'        ];    }    public function shout($events)    {        echo 'wang, wang, wang<br/>';    }}

这里写图片描述

<?phpnamespace vendor\animal;use app\behaviors\Behavior1;use yii\base\Component;class Dog extends Component{    /*public function behaviors()    {        return [            Behavior1::className()        ];    }*/    public function look()    {        echo 'i am looking <br/>';    }}

这里写图片描述

public function actionTest1()    {        $dog = new Dog();        $behavior1 = new Behavior1();        $dog->attachBehavior('behavior1', $behavior1);        //$dog->detachBehavior('behavior1');        $dog->eat();    }

4. 依赖注入
这里写图片描述

1.容器(定义并解决依赖关系)

<?phpnamespace app\controllers;use yii\web\Controller;use yii\di\Container;class Test2Controller extends Controller{    public function actionIndex()    {        $container = new Container();        $container->set('app\controllers\Driver', 'app\controllers\ManDriver');        // $driver = new ManDriver();        // new Car($driver)        $car = $container->get('app\controllers\Car');        $car->run();die;    }}interface Driver{    public function driver();}class ManDriver implements Driver{    public function driver()    {        echo 'i am old man';    }}class Car{    private $driver = null;    public function __construct(Driver $driver)    {        $this->driver = $driver;    }    public function run()    {        $this->driver->driver();    }}

2.服务定位器(配置服务的参数信息)
这里写图片描述
这里写图片描述

<?phpnamespace app\controllers;use yii\web\Controller;use yii\di\Container;use yii\di\ServiceLocator;class Test2Controller extends Controller{    public function actionIndex()    {        /*$container = new Container();        $container->set('app\controllers\Driver', 'app\controllers\ManDriver');        // $driver = new ManDriver();        // new Car($driver)        $car = $container->get('app\controllers\Car');        $car->run();die;*/        /*\Yii::$container->set('app\controllers\Driver',                'app\controllers\ManDriver'            );        $sl = new ServiceLocator();        $sl->set('car', [            'class' => 'app\controllers\Car'        ]);        $car = $sl->get('car');        $car->run();*/        //如果在web中定义了        \Yii::$container->set('app\controllers\Driver',            'app\controllers\ManDriver'        );        \Yii::$app->car->run();    }}interface Driver{    public function driver();}class ManDriver implements Driver{    public function driver()    {        echo 'i am old man';    }}class Car{    private $driver = null;    public function __construct(Driver $driver)    {        $this->driver = $driver;    }    public function run()    {        $this->driver->driver();    }}
0 0
原创粉丝点击