PHP включает функции класса с переменными - PullRequest
1 голос
/ 19 мая 2009

Я пытаюсь использовать переменную для получения функции в расширенном классе, это то, что я хочу сделать, но я не могу заставить ее работать, спасибо за вашу помощь.

class topclass {
    function mode() {
        $mode = 'function()';

        $class = new extendclass;
        $class->$mode;
    }
}

Ответы [ 2 ]

7 голосов
/ 19 мая 2009

Не включайте скобки "()" в переменную $ mode.

class topclass {
    function mode() {
        $mode = 'functionx';

        $class = new extendclass;
        $class->$mode();
    }
}
0 голосов
/ 19 мая 2009

Вы также можете использовать обратный вызов, который является кортежем массива экземпляра и строкой с именем функции. Если предполагаемый вызов - $ foo-> bar (), то обратный вызов будет:

$callback = array($foo, 'bar');

Обычные функции (не метод) и статические методы хранятся в виде простых строк:

// Function bar
$callback = 'bar';
// Static method 'bar' in class Foo
$callback = 'Foo::bar';

Он вызывается с помощью call_user_func или call_user_func_array, второй параметр, позволяющий передавать функции обратного вызова:

// No parameters
call_user_func($callback);
// Parameters 'baz' and 'bat'
call_user_func_array($callback, array('baz', 'bat');

Может показаться, что это ненужное усложнение, но во многих случаях вам может потребоваться программная сборка вызова функции, или вы можете не знать заранее, сколько параметров вы передадите функции (некоторые функции, такие как array_merge и sprintf, допускают переменное количество параметров).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...