2015-10-28 2 views
1

Если я пост, я могу получить содержимое, делая $payload = json_decode($app->request->getBody());как «request-> getBody» работает в тонком

Но я не могу понять, как request->getBody работает в стройной.

Во-первых, есть магический метод:

public function __get($name) 
{ 
    return $this->container->get($name); 
} 

Это вернет Слим \ Http \ объект запроса. Сейчас все в порядке.

$this->container является Слим \ Helper \ Set, и это функция прибудет:

public function get($key, $default = null) 
{ 
    if ($this->has($key)) { 
     $isInvokable = is_object($this->data[$this->normalizeKey($key)]) && method_exists($this->data[$this->normalizeKey($key)], '__invoke'); 

     return $isInvokable ? $this->data[$this->normalizeKey($key)]($this) : $this->data[$this->normalizeKey($key)]; 
    } 

    return $default; 
} 

$this->data[$this->normalizeKey($key)] такой же, как $this->data['request'], что-то типа «Закрытие» (не обязательно понимать это).

$isInvokable верно, так это называется:

$this->data[$this->normalizeKey($key)]($this) 

Что эта линия делает? Почему ($this) (Slim \ Helper \ Set) в конце?

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

public function singleton($key, $value) 
{ 
    $this->set($key, function ($c) use ($value) { 
     static $object; 

     if (null === $object) { 
      $object = $value($c); 
     } 

     return $object; 
    }); 
} 

Почему singleton($key, $value)? Его никогда не называли! $ ключ не задан в начале функции. Также, что делает $ c Slim \ Helper \ Set и $ value закрытием?

И почему выполнение только static $object заставляет объект $ переходить от унификации к одному из типов Slim \ Http \ Request?

ответ

0

Отказ от ответственности: Я не знаком с Slim. Я просто иду по тому, что вы опубликовали.

Ну, Set->get() метод испытания, если значение в массиве data собственности с ключом $key может быть вызван, а затем делает это, если это правда.

Так $this->data[$this->normalizeKey($key)]($this) вызывает метод с $this, заданным как параметр, а затем Set->get() возвращает возвращаемое значение этого метода.

Закрытие также часто называют «anonymous function», что является новой функцией PHP 5.3. Использование массива как variable to call a function доступно с PHP 5.4.

Это позволяет вам передавать функции/методы как значения, которые, возможно, отличительная особенность в functional programming.

0

Функция singleton вызывается до инициализации.

Он устанавливает все $ key функции.

Итак, $this->data[$this->normalizeKey($key)]($this) - это функция!