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(); ?>
測試結果測試