@aassdds
Люблю борщ и PHP

Возможно ли сделать что то подобное?

Добрый вечер друзья !

Собственно вопрос состоит из 2х частей:
1) недавно, разбираясь с facebook SDK увидел такую вот строчку

$user = (new FacebookRequest($this->session, 'GET', '/me'))->execute()->getGraphObject();
особо заинтересовали последние 2 функции...
я так понимаю это последовательный вызов функций, без сохраниния промежуточного результата в переменную ?
или я совсем не прав ?
в общем - хотелось бы почитать про такой подход, а как он называется - без понятия, поэтому даже не знаю что спросить у Гугла....

и вторая часть вопроса

предположим функция getUserInfo($id) возвращает всю информацию по юзеру с id=$id ввиде ассоц массива...
чтобы добраться до какого то конкретно значения я делал так :
$user_info = $this->getUserInfo($id);
$user_foto = $user_info['foto'];

можно ли это как то сократить ?
типа

$user_foto = $this->getUserInfo($id)->['foto'];
большое спасибо )))
  • Вопрос задан
  • 2312 просмотров
Решения вопроса 3
IvanCher
@IvanCher
Мысли шире
Эти возможности появились в php 5.4. https://php.net/manual/ru/migration54.new-features.php
Что про них читать, я даже ума не приложу. Чего тут читать ? Функция возвращает массив, значит можешь сразу обращаться к элементу этого массива по индексу.
$user_foto = $this->getUserInfo($id)['foto'];
$user_foto = $this->getUserInfo($id)->foto; // Если возвращается объект.

Только проверки на существование этого делать не забывай.
Аналогично и с созданием объекта. Не хочешь использовать промежуточную переменную, просто помести создание объекта в скобки.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Первое - это не вызов функций, а обращение к методам объекта.
Если выражение вернуло объект, то ты можешь обратиться к его методу или свойству. И так далее.
В РНР было изначально
То есть, если foto содержит объект, то можно написать
$user_foto = $this->getUserInfo($id)['foto']->url;

Синтаксис вида getUserInfo($id)['foto'] называется разыменованием массива и появился, действительно, в 5.4
Ответ написан
Комментировать
@asd111
$user = (new FacebookRequest($this->session, 'GET', '/me'))->execute()->getGraphObject();


Это называется method chaining. Не знаю как перевести. Суть в том что из метода возвращается объект.
Т.е. грубо говоря примерно так:
<?php

class String
{
    private $str;
    function __construct()
    {
        $this->str = "";
    }

    function addA()
    {
        $this->str .= "a";       
        return $this;   // Данная строчка возвращает объект типа String
    }

    function addB()
    {
        $this->str .= "b";       
        return $this;  // Данная строчка возвращает объект типа String
    }

    function printString()
    {
        echo $this->str;
    }
}
$a = new String();
$a->addA()->addB()->printString();


Выведет ab
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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