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
- 12. 程序扩展性
- 可扩展性程序的提纲
- Java ClassLoader 实现程序的扩展性
- 写程序一定要注意可读性,扩展性
- 程序的灵活性与可扩展性
- 程序的可维护性和可扩展性
- 编写扩展性更好的程序——里氏替换原则
- java反射技术提高了程序的扩展性
- 使用多态的‘扩展性’改进程序写法
- 可扩展性
- 软件扩展性
- scala扩展性
- Windows Sockets 2.0:使用完成端口高性能,可扩展性Winsock服务程序
- Windows Sockets 2.0:使用完成端口高性能,可扩展性Winsock服务程序
- Windows Sockets 2.0:使用完成端口高性能,可扩展性Winsock服务程序
- Windows Sockets 2.0:使用完成端口高性能,可扩展性Winsock服务程序
- Windows Sockets 2.0:使用完成端口高性能,可扩展性Winsock服务程序
- 利用java反射机制及工厂模式增强程序的扩展性
- WikiOI 1332 上白泽慧音 (最裸 强连通)
- 《读大学,究竟读什么?》 笔记
- 安装Android Studio
- (十五)ArcGIS API For Javascript之地图输出
- ndk开发通过address2line 定位bug
- 12. 程序扩展性
- 1.1 java 虚拟机如何启动的?启动之后都做了什么?
- MFC六大核心机制之二:运行时类型识别(RTTI)
- LeetCode 292. Nim Game
- javascript的计时器简单介绍
- 【BZOJ2959】【codevs2002】长跑,维护双联通分量
- java基础线程-wait+notify
- JS 取服务器时间
- Centos 7 docker 启动容器iptables报No chain/target/match by that name