标签:llb return count public cal color struct 闭包 int
<?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));
标签:llb return count public cal color struct 闭包 int
原文地址:http://www.cnblogs.com/yangcclg/p/6082814.html