spl_autoload_register函数的调用autoload引入文件。
为了方便理解,这是个人目录结构php
自动加载类文件的代码编程
<?php /* * 1.实现类的自动加载 * 2.设计模式 之 观察者模式 */ define ('BASEDIR',__DIR__); require "Loader.php"; //自动载入类文件 spl_autoload_register('Loader::autoload');
<?php class Loader{ static function autoload($class) { //引入相应的文件 require BASEDIR.'/'.str_replace('\\', '/', $class).'.php'; } }
观察者的生产代码设计模式
<?php abstract class Event { //观察事件通常不可见 private $observer = array(); public function addObserve(Observer $observer){ //将观察者添加到数组 $this->observer[] = $observer; } public function notify() { //遍历更新输出 foreach ($this->observer as $value) { $value->update(); } } }
更新的契约接口数组
<?php interface Observer{ //契约接口的声明 public function update(); }
主体观察者模式测试代码(也是入口文件)函数
<?php /* * 1.实现类的自动加载 * 2.设计模式 之 观察者模式 */ define ('BASEDIR',__DIR__); require "Loader.php"; //自动载入类文件 spl_autoload_register('Loader::autoload'); class Genertor extends Event { public function trigger(){ echo "逻辑·1\n"; $this->notify(); } } class Test1 implements Observer { public function update(){ echo "我是Test事件1\n"; } } class Test2 implements Observer { public function update(){ echo "我是Test事件2\n"; } } class Test3 implements Observer { public function update(){ echo "我是Test事件3\n"; } } class Test4 implements Observer { public function update(){ echo "我是Test事件4\n"; } } $event = New Genertor(); $event->addObserve(new Test1); $event->addObserve(new Test2); $event->addObserve(new Test3); $event->addObserve(new Test4); $event->trigger(); ?>
测试结果测试