// Анонимные функции echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // Присваивание анонимной функции $greet = function($name) { printf("Hello %srn", $name); }; $greet('World'); // --------------------------------------------------- // ЗАМЫКАНИЯ // --------------------------------------------------- $g = 'test'; $f = function($a, $b) use($g){ echo $a . $b . $g; }; $g = 'test2'; $f(); // Замыкания идеально подходят для реализации событий $this->events->on(User::EVENT_REGISTER, function($user){ //обновить счетчик посещений }); // Замыкания идеально подходят для создания валидаторов $notEmpty = function($v) { return strlen($v) > 0 ? true : "Значение не может быть пустым”; }; function getRangeValidator($min, $max){ return function($v) use ($min, $max){ return ($v >= $min && $v <= $max) ? true : "Значение не попадает в диапазон"; }; } // Замыкания позволяют делать отложенную загрузку: // Где-то в модели файле или на старте $service->register('Mailer', function() { return new Mailer('host', 'url'); }); // Где-то в контроллере $this->service('Mailer')->mail(...); // --------------------------------------------------- // Замыкания могут быть рекурсивными (высший пилотаж): // --------------------------------------------------- $factorial = function( $n ) use ( &$factorial ) { if( $n == 1 ) return 1; return $factorial( $n - 1 ) * $n; };
PHP Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor