Регистрация методов класса в качестве обратных вызовов

16

Я не уверен, что сделал это правильно.

Как я понимаю:

если у меня есть класс foo и статическая панель методов, я могу зарегистрировать это как обратный вызов, передав массив в array("foo","bar")качестве имени функции.

Если у меня есть экземпляр класса в $ foo и я хочу вызвать панель методов, я передаю массив array($foo,'bar').

Если мне нужно зарегистрировать действие внутри самого класса, будет ли оно работать array($this,'bar')?

Дэниел Чатфилд
источник
3
Разве тест не будет быстрее, чем задавать вопрос? ;) Да, ты можешь это сделать.
fuxia
2
Тест может помочь, но иногда вы ищете обратную связь. Я думаю, что на самом деле нормально задавать вопрос, и есть это правило, ставя под сомнение мотивацию ОП ... :)
hakre

Ответы:

11

Если мне нужно зарегистрировать действие внутри самого класса, будет ли оно работать array($this, 'bar')?

Да, это работает. $thisДокументы ссылаются на конкретный экземпляр, необходимый для обратного вызова . Это в точности как $fooпример, который вы приводите. Просто $thisон немного более особенный, но в целом он одинаковый и работает безошибочно с обратными вызовами в PHP.

Дополнительно:

если у меня есть класс foo и статическая панель методов, я могу зарегистрировать это как обратный вызов, передав массив в array("foo","bar")качестве имени функции.

Да, вы можете сделать это, для статической функции, вы также можете записать ее как строку вместо массива: foo::barсм. Документацию по обратным вызовам . Может быть удобно.

hakre
источник
1

Для статических методов вы также можете сделать это:

['foo','bar'] 

когда следующее дает неопределенную константу класса 'bar' :

foo::bar

пример - при указании $ control_callback для wp_add_dashboard_widget

Уильям Туррелл
источник