За последние 24 часа нас посетили 35097 программистов и 1737 роботов. Сейчас ищут 763 программиста ...

Анонимные функции

Тема в разделе "PHP для новичков", создана пользователем abler98, 23 сен 2014.

  1. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    Появилась задумка сделать выполнение чего-либо до и после выполнения приложения, вот входная точка:
    Код (PHP):
    1. <?php
    2.  
    3. require __DIR__.'/system/functions.php';
    4. require __DIR__.'/system/autoload.php';
    5. require __DIR__.'/system/bootstrap.php';
    6.  
    7. $app = new Application;
    8. $app->boot(); 
    Файл system/bootstrap.php
    Код (PHP):
    1. <?php
    2.  
    3. Application::before(function (/*здесь разные параметры*/) {
    4.     // Вот это происходит в самом начале
    5. });
    6.  
    7. Application::after(function (/*здесь разные параметры*/) {
    8.     // А это в самом конце
    9. }); 
    Такое ведь можно сделать? :) Может есть хороший мануал по анонимным функциям? Но желательно на примере. Насколько я понял, нужно в методе Application::before() принимать параметр (функцию) и записывать в переменную, а потом с помощью call_user_func() вызывать функцию из переменной?

    Добавлено спустя 11 минут 27 секунд:
    Я кажется сам разобрался, всем спасибо!
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    там не так много что есть. ну use или как оно там.
     
  3. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    Я так сделал
    Код (PHP):
    1. <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /><br />class Application </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    private $response</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    <br />    private static $before</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    private static $after</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    <br />    public function __construct</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{}<br /></span><span class="syntaxdefault">    public function __destruct</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{}<br /></span><span class="syntaxdefault">    <br />    public static function before</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$callback</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$before </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $callback</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    <br />    public static function after</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$callback</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$after </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $callback</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    <br />    public function boot</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        call_user_func</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$before</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">        $route </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> new Route</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">        $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">response </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $route</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">render</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">        call_user_func</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$after</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">        $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">render</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    <br />    public function render</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        echo $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">response</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br />}&nbsp;</span><span class="syntaxdefault"></span>
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Лучше тогда менеджер событий реализовать. Классная штука. Очень гибкая. Вот пример такого:
    http://phpfiddle.org/main/code/qpvd-9mgg