每日学习笔记(9)

 1,PHP的回调函数是一个很有用的语法,可以将业务对象与附加其上的处理逻辑隔离开来,这也是观察者模式的一种实现。

 

  
  
  
  
  1. <?php 
  2. class Product 
  3.     public $name
  4.     public function __construct($name
  5.     { 
  6.         $this->name = $name
  7.     } 
  8. class Processor 
  9.     private $callbacks = array(); 
  10.     public function registerCallback($callback)  
  11.     { 
  12.         if ( !is_callable($callback)) { 
  13.             throw new Exception("not callable"); 
  14.         } 
  15.         $this->callbacks[] = $callback
  16.     } 
  17.     public function process($product)  
  18.     { 
  19.         foreach($this->callbacks as $callback) { 
  20.             call_user_func($callback$product); 
  21.         } 
  22.     } 
  23. class Mailer 
  24.     public function sendMail($product)  
  25.     { 
  26.         print "mailing ({$product->name})\n"
  27.     } 
  28. $logger = create_function('$product''print "loggint({$product->name})\n";'); 
  29. $processor = new Processor(); 
  30. $processor->registerCallback($logger); 
  31. $processor->registerCallback(array(new Mailer(), "sendMail")); 
  32. $processor->process(new Product("pen")); 
  33. ?> 

在PHP5.3中还引入了匿名函数,因此上面的日志函数可以用下述形式来代替:

 

  
  
  
  
  1. $logger = function($product) { 
  2. print "loggint({$product->name})\n"
  3. }; 

2,PHP5.3以前的版本是没有package这个语法的,一般是用文件夹来进行类文件的分隔,然后用require_once或include_once来将文件包含来。Include和require这两种方法的差异在于对错误的处理不同。Require包含进来的文件如果出错则会导致整个程序挂掉,而include则只会产生警告信息,并不会导致调用脚本挂掉。因此,从安全性来讲,用require_once更好。我检查了手头的代码,发现还是有一些地方用了include_once,这一点上应该改改。

你可能感兴趣的:(PHP,职场,技巧,休闲,PHP语言)