@Ankozar

Чем отличается этот синаксис?

Пишу парсер новостей.
Получаю на целевом сайте вот такой json:
stdClass Object
(
    [feeduid] => 969806014754
    [feedtitle] => Новости Конторы
    [feeddescr] => 
    [feedtz] => Asia/Yekaterinburg
    [feedlang] => 
    [code] => 
    [header] => 
    [footer] => 
    [disablepopup] => 
    [posts] => Array
        (
            [0] => stdClass Object
                (
                    [uid] => kajgeiynr1
                    [title] => Открылась выставка о медиаискусстве
//и т.д.


Разбираю результат.
Вот это работает:

$site = file_get_contents($url);
$json = json_decode($site);
foreach($json->posts as $post){
$text_link_result[$i]  = $post->title; // получаю "Открылась выставка о медиаискусстве"
};


Вот это - нет.

$attrs = 'url,title,date,image';
$attrs_arr = preg_split('/,/', $attrs);
$site = file_get_contents($url);
$json = json_decode($site);
foreach($json->posts as $post){
$text_link_result[$i] = $post->$attrs_arr[1]; //ничего не получаю
};


Не понимаю, почему нельзя нужный параметр передать через переменную.
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Хороший вопрос.

Этот кот будет работать только в 5 версии.
В 7 версии в РНР появился uniform variable syntax.
Он унифицировал обращения к любым типам переменных - объектам, функциям, массивам - так что их стало возможно приписывать друг к другу в любом порядке, $foo()['bar']()->baz.
Но при этом, очевидно, понадобилось ввести правило очередности исполнения. Самое простое - слева направо.

То есть что в итоге мы получаем? Сначала пхп читает $post->$attrs_arr и ждет что в $attrs_arr будет строка. Но там получается массив, и РНР начинает орать тебе об этом. но ты зачем-то выключил отображение ошибок, и ничего не видишь. Так делать нельзя. Если бы ты увидел ошибку, то мог бы при некотором минимальном навыке гугления найти решение самостоятельно. Хотя конечно зумеры, в отличие от нас старых пердунов, родившихся когда интернета ещё не было, на удивление с трудом представляют себе что такое поиск в интернете.

Ну а решение простое - заключить переменное свойство в фигурные скобки, чтобы ПХП сначала получил элемент массива, а потом уже поставлял его в качестве имени свойства
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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