2013-09-14 4 views
3

Я узнаю о ООП, и я думаю, что получаю от этого зависание. Мой вопрос, почему автор WordPress шаблонного плагина написал функцию добавления действия, как этотadd_action в wordpress с помощью OOP?

add_action('admin_init', array(&$this, 'admin_init')); 

Согласно Codex Я понимаю add_action крючка, то PARAMATERS, передаваемое в $tag «Название акции, к которой $ function_to_add подключен ", и функция, которую вы хотите подключить $function_to_add.

Ну, я понимаю, что функции в ООП являются методами, и я могу понять, почему это может изменить синтаксис, но это просто неопределенное представление, я хочу, чтобы ясный ответ, почему автор использует массив, а затем использует &$this. Я понимаю, почему можно использовать $this->property, но не так уверен в &$this.

Как вы относитесь к методу? Если так, я до сих пор не понимаю массив, почему бы не посмотреть что-то вроде $this->admin_init.

Кстати структура выглядит вроде как это

class my_plugin_settings { 

      public function __construct() { 

        // register actions 
        add_action('admin_init', array(&$this, 'admin_init')); 

      } 

      public function admin_init() { 

        //Settings here 
      } 
    } 

ответ

1

& это обеспечивает контекст для функций PHP под капотом, что подключить его к вашей функции admin_init. Проверьте декларацию add_action или посмотрите на http://www.php.net/manual/en/function.call-user-func-array.php.

Вот как PHP знает, чтобы использовать функцию в этом объекте, а не функция глобального уровня

+0

Ok спасибо за пояснения и ссылку .. Я гугл это и не получили какие-либо хорошие результаты из-за амперсанд. Хорошо, так (вопрос noob), который делает '& $ this' ключом и функцией' admin_init' значение? Я не уверен, почему массив, а не просто сказать '$ this-> funcName'. Идущий читать, надеюсь, поймет, почему, но если вы знаете, что было бы здорово, если бы вы могли кратко объяснить :) –

+1

Вы передаете массив, но он соответствует типу 'callable'. Именно так структурируются вызываемые символы. Если массив передан, он предполагает, что ключ является объектом для вызова, а значение является функцией. Если передается только строка, PHP предполагает, что это функция глобального уровня и вызывает это. http://www.php.net/manual/en/language.types.callable.php –

+0

Ах, хорошо, что имеет смысл этого лучше. Нет другого способа написать тот же синтаксис? Похоже, что это 'Foo :: test' - способ ссылки на объект/метод? Этот синтаксис является новым, поскольку я предполагаю, что он используется только в ООП, но я вижу его много, теперь, когда я работаю с ООП. –

Смежные вопросы