PHP 回调、匿名函数和闭包
2016-11-20 16:13
477 查看
<?php class Product{ public $name; public $price; function __construct($name, $price){ $this->name = $name; $this->price = $price; } } class ProcessSale{ private $callbacks; function registerCallback($callback){ if(!is_callable($callback)){ throw new Exception("callback not callable"); } $this->callbacks[] = $callback; } function sale($product){ print "{$product->name}:processing \n"; foreach ($this->callbacks as $callback){ call_user_func($callback, $product); } } } $logger = create_function('$product', 'print " logging ({$product->name})\n";'); $processor = new ProcessSale(); $processor->registerCallback($logger); $processor->sale(new Product("shoes", 6)); print "\n"; $processor->sale(new Product("coffee", 6)); $logger2 = function($product){ print " logging ({$product->name})\n"; }; $processor = new ProcessSale(); $processor = new ProcessSale(); $processor->registerCallback($logger2); $processor->sale(new Product("shoes", 6)); print "\n"; $processor->sale(new Product("coffee", 6)); class Mailer{ function doMail($product){ print " mailing ({$product->name})\n"; } } $processor = new ProcessSale(); $processor->registerCallback(array(new Mailer(), "doMail")); $processor->sale(new Product("shoes", 6)); print "\n"; $processor->sale(new Product("coffee", 6)); class Totalizer{ static function warnAmount(){ return function($product){ if ($product->price > 5){ print " reached high price: {$product->price}\n"; } }; } } $processor = new ProcessSale(); $processor->registerCallback(Totalizer::warnAmount()); //..... class TotalizerNew{ static function warnAmount($amt){ $count = 0; return function($product) use ($amt, &$count){ $count += $product->price; print " count: $count\n"; if ($count > $amt){ print " high price reached:{$count}\n"; } }; } } $processor = new ProcessSale(); $processor->registerCallback(TotalizerNew::warnAmount(8)); $processor->sale(new Product("shoes", 6)); print "\n"; $processor->sale(new Product("coffee", 6));
相关文章推荐
- 20.php回调、匿名函数、和闭包操作
- php 回调、匿名函数和闭包
- php 回调 匿名函数 闭包
- 回调、匿名函数、闭包在PHP中的应用
- PHP匿名函数及闭包
- php 匿名函数和闭包
- php的闭包(Closure)也就是匿名函数。
- php中的匿名函数和闭包(closure)
- php闭包与匿名函数
- PHP匿名函数及闭包
- PHP闭包--匿名函数
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php闭包和匿名函数
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- PHP匿名函数 闭包简单例子
- php 函数【匿名函数、闭包】
- php中的匿名函数和闭包(closure)
- php的数组遍历函数回调匿名函数
- PHP闭包与函数回调
- PHP中的闭包(匿名函数)浅析