Какая разница между объявлением функции обратного вызова ajax с $ this и без нее?

Существует форма, работающая с AJAX Framework. И есть элемент формы, имеющий функцию обратного вызова с именем «myFunction», которая является общедоступным методом класса формы. Обратный вызов может быть объявлен как

'callback' => [$this, 'myFunction']

И он также может быть объявлен как

'callback' =>  '::myFunction'

Не могли бы вы пояснить мне, какая функциональная разница между этими объявлениями?

7 голосов | спросил Yakimkin Roman 28 PM00000090000001631 2017, 21:02:16

1 ответ


1

Разница между вызовом статического метода и вызовом метода объекта. В соответствии с документами :

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

Ваш первый обратный вызов - это вызов объекта вашему методу. Второй - статический вызов статического метода. Поскольку PHP является прощающим языком, оба подхода будут работать (PHP попытается их разрешить для вас), но будет выдавать предупреждения, если ваш статический обратный вызов вызовет метод объекта и наоборот.

В статическом контексте вы не можете вызвать методы объекта в своем классе. Однако в объектном контексте вы можете вызвать статические методы. Я бы рекомендовал использовать вызовы объектов как можно больше.

ответил Gun5m0k3 28 PM000000100000002231 2017, 22:05:22

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132