Что-то как обратный вызов делегирует функцию в php

Вы передаете указатель по значению.

Передайте ссылку на указатель, если вы хотите его обновить.

bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
15
задан bensiu 7 September 2018 в 16:16
поделиться

3 ответа

(Кроме шаблона "наблюдатель"), можно также использовать call_user_func() или call_user_func_array() .

, Если Вы передаете array(obj, methodname) так же первый параметр, он будет вызванный как $obj->methodname().

<?php
class Foo {
    public function bar($x) {
        echo $x;
    }
}

function xyz($cb) {
    $value = rand(1,100);
    call_user_func($cb, $value);
}

$foo = new Foo;
xyz( array($foo, 'bar') );
?>
16
ответ дан 1 December 2019 в 03:15
поделиться

Что Вы думаете об использовании Наблюдатель шаблон? В противном случае можно реализовать истинный обратный вызов этот путь:

// This function uses a callback function. 
function doIt($callback) 
{ 
    $data = "this is my data";
    $callback($data); 
} 


// This is a sample callback function for doIt(). 
function myCallback($data) 
{ 
    print 'Data is: ' .  $data .  "\n"; 
} 


// Call doIt() and pass our sample callback function's name. 
doIt('myCallback'); 

Дисплеи: Данные: это - мои данные

4
ответ дан 1 December 2019 в 03:15
поделиться

Мне интересно, можно ли использовать магический метод __invoke для создания "как бы" функции первого класса и таким образом реализовать обратный вызов

Звучит что-то вроде этого, для PHP 5.3

interface Callback 
{
    public function __invoke(); 
}

class MyCallback implements Callback
{
    private function sayHello () { echo "Hello"; }
    public function __invoke ()  { $this->sayHello(); } 
}

class MySecondCallback implements Callback
{
    private function sayThere () { echo "World"; }
    public function __invoke ()  { $this->sayThere(); }
}

class WhatToPrint
{
    protected $callbacks = array();
    public function register (Callback $callback) 
    {
        $this->callbacks[] = $callback;
        return $this;
    }
    public function saySomething ()
    {
        foreach ($this->callbacks as $callback) $callback(); 
    }
}

$first_callback = new MyCallback;
$second_callback = new MySecondCallback;
$wrapper = new WhatToPrint;
$wrapper->register($first_callback)->register($second_callback)->saySomething();

Будет печатать HelloWorld

Надеюсь, это поможет ;)

Но я бы предпочел паттерн Controller с SPL для такой возможности.

3
ответ дан 1 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: