2015-03-08 3 views
1

Рассматривая код онлайн или как часть примеров или руководств, я иногда вижу some_function(array($this, 'something')), что это значит? Я никогда не видел такой синтаксис массива, и это меня действительно смущает.Что означает синтаксис этого массива?

Одним из примеров является этот код из a comment in the manual:

<?php 

    class ClassAutoloader { 
     public function __construct() { 
      spl_autoload_register(array($this, 'loader')); 
     } 
     private function loader($className) { 
      echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n"; 
      include $className . '.php'; 
     } 
    } 

    $autoloader = new ClassAutoloader(); 

    $obj = new Class1(); 
    $obj = new Class2(); 

?> 

Может кто-то пожалуйста, объясните, что означает, что синтаксис?

+0

Это синтаксис для объекта/метода отзывной, а не простая функция вызываемая –

ответ

1

Это PHP callable. Это означает вызов метода loader на объекте $this.

Вот ссылка с дополнительной информацией: http://php.net/manual/en/language.types.callable.php

+0

Тогда есть разница между написанием 'spl_autoload_register (массив ($ это,«Загрузчик»)) ; 'и' spl_autoload_register ($ this-> loader ($ className)); '? Каковы преимущества написания, как в примере кода? – user4181107

+0

Если '$ this-> loader ($ className)' возвращает 'вызываемый', вы не можете его так называть. 'spl_autoload_register' требует в качестве первого параметра' callable'. – blockhead

0

Ну руки по одному параметру функции spl_autoload_register(). Параметр имеет тип array и содержит два элемента. Первый - это объект, который вызывает функцию, второй - строку.

1

Это обычный синтаксис массива в PHP. Вы, вероятно, сбиты с толку, потому что он не сохраняется в переменной, а передается напрямую. Чтобы пояснить это,

spl_autoload_register(array($this, 'loader')); 

эквивалентно

и

$array = array(); 
$array[0] = $this; 
$array[1] = 'loader'; 
spl_autoload_register($array); 
0
some_function(array($this, 'something')) 

это просто функция, которую вы звоните, и в качестве параметра вы даете ему массив

он может быть переписан на этот

some_function([$this, 'something']) 

или

$arr = array($this, 'something'); 
some_function($arr); 
Смежные вопросы