<?php require_once "closures.php"; $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));
$count += $product->price; // добавляет к счетчику суммы товаров, цену товара print "сумма {$count} <br>"; // выводит сумму товара if ($count > $amt) { // если сумма товара выше заданной суммы, то выводим сообщение print "продано товаров на сумму {$count} <br>"; } }; } } $logger = create_function('$product', 'print "Записываем {$product->name} <br>";'); // создаём новую анонимную функцию $logger2 = function ($product) { print "Записываем {$product->name} <br>"; }; // болие удобный способ создание анонимной функции $processor = new ProcessSale(); // создаём новый объект класса ProcessSale $processor->registerCallback($logger); // записываем в массив нашу новую анонимную функцию $logger $processor->registerCallback($logger2); // записываем в массив нашу новую анонимную функцию $logger2 $processor->registerCallback([new Mailer(), "doMail"]); // записываем в массив новый метод из класс Mailer $processor->registerCallback(Totalizer::warnAmount(8)); // записываем в массив новый статичный метод класса Totalizer, который принимает сумму после которой начинает выводить определённое сообщение $processor->sale(new Product("Туфли", 6)); // передаём новый объект класса Product, в метод который который передаёт его всем записанным в массив новым функциям echo "<br>"; $processor->sale(new Product("Кофе", 6));
<?php require_once "closures.php"; 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));
<?php require_once "closures.php"; 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()); $processor->sale(new Product("shoes", 6)); print "\n"; $processor->sale(new Product("coffee", 6));