<?php
class Product {
public $name;
public $price;
function __construct($name, $price){
$this->name = $name;
$this->price = $price;
}
}
class ProcessSale {
private $callbaks;
function registerCallback( $callback ){
if( !is_callable( $callback ) ){
throw new Exception( "$callback - Функция не может быть вызвана" );
}
$this->callbacks[] = $callback;
}
function sale( $product ){
print "{$product->name} обрабатывается ...\n";
foreach($this->callbacks as $callback){
call_user_func( $callback, $product );
}
}
}
class CClass1 {
function Method( Product $product ){
print "3 Обработчик {$product->name} обработан\n";
}
}
class CClass2 {
static function Method( Product $product ){
print "4 Обработчик {$product->name} обработан\n";
}
}
class CClass3 {
static function Method(){
return function ( Product $product ){
print "5 Обработчик {$product->name} обработан\n";
};
}
}
$logger = function ( Product $product ){
print "1 Обработчик {$product->name} обработан\n";
};
//
$processor = new ProcessSale();
$processor->registerCallback( $logger );
$processor->registerCallback( function ( Product $product ){ print "2 Обработчик {$product->name} обработан\n"; } );
$processor->registerCallback( array(new CClass1, 'Method') );
$processor->registerCallback( array(new CClass2, 'Method') );
$processor->registerCallback( CClass3::Method() );
// Занесение продуктов
$processor->sale( new Product('Джинсы', 45) );
$processor->sale( new Product('Куртка', 345) );
$processor->sale( new Product('Шапка', 23) );
Use
$param = 'Мир';
$func = function ($t = '') use ($param){
print "$t $param\n";
};
echo $func('Привет');