2013-10-09 2 views
1

Простые вещи,используют функции PHP-Исеть с тройной оператор

Это работает без каких-либо проблем:

$openMonday = rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':'); 
$business->openingTimes['monday']  = isset($openMonday) ? $result['opening_hours']['periods'][1]['open']['time'] : ''; 

Но я не хочу, чтобы написать две строки для этого, потому что тогда я бы сделайте это также для всех других часов работы.

Почему я не могу просто написать

$business->openingTimes['monday']  = isset(rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':')) ? $result['opening_hours']['periods'][1]['open']['time'] : ''; 

Я всегда получаю ошибку, что она ожидает переменную. Как я могу использовать методы в isset с тройным оператором?

+1

Если вам нужно сделать то же самое для всех других часов работы, вы должны попытаться сделать его функцией! Чтобы вы могли написать его в двух строках и быть более кратким, когда вы это называете. – fluminis

ответ

2

Проблема заключается в том, что isset() не является реальной функцией, а конструкцией языка, которая требует, чтобы ее аргументы были переменными, или выдает синтаксическую ошибку.

Смотрите также ручной ввод: http://php.net/manual/en/function.isset.php

Во всяком случае, так же как и @deceze сказал, вы, вероятно, не хотите использовать isset() здесь, так как он используется, чтобы проверить, если переменная существует.

В этом случае, вы можете использовать empty(), поэтому вместо того, чтобы писать

$openMonday = rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':'); 
$business->openingTimes['monday'] = isset($openMonday) ? $result['opening_hours']['periods'][1]['open']['time'] : ''; 

вы могли бы сделать

$openMonday = rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':'); 
$business->openingTimes['monday'] = !empty($openMonday) ? $result['opening_hours']['periods'][1]['open']['time'] : ''; 

И вы не должны беспокоиться, чтобы сделать это один вкладыш любой ценой! Создание функции вместо этого, а затем вызвать его, когда это необходимо ... Но если вы действительно все еще хотите сделать это рядный, то вы могли бы сделать

$business->openingTimes['monday'] = !empty(rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':')) ? $result['opening_hours']['periods'][1]['open']['time'] : ''; 

просто помните, что выше, требует, по крайней мере PHP 5.5!

И, наконец, строка выше, может просто быть записана как

$business->openingTimes['monday'] = !rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':') ? $result['opening_hours']['periods'][1]['open']['time'] : ''; 

без необходимости isset() ни empty()

+1

Почему downvote? Это отвечает на вопрос ОП! Тот факт, что s/he не должен использовать 'isset()' в этом случае, является другим вопросом ... –

+0

Если OP выходит в совершенно неправильное направление, вам будет полезно посоветовать ему обновить его версию PHP вместо этого указывая, что он идет в неправильном направлении? – deceze

+2

@deceze Это, ИМХО, другое дело, но этот ответ не ошибочен per se: он спросил, почему isset() терпит неудачу, и я сказал ему. –

0

Вам не нужно isset здесь! isset используется для безопасного тестирования: ... ну ... переменная существует. Вы знаете Ваша переменная существует, потому что вы объявляете ее на линии раньше. Если вы хотите вытолкнуть его в одну строку, вы даже не используете переменную, вы напрямую работаете с значением. Вы просто хотите сравнить значение с false, которое вы можете легко сделать inline.

Просто избавитесь от isset. И читайте The Definitive Guide To PHP's isset And empty.

+0

Я понимаю вашу точку зрения, но это все равно не отвечает на мои вопросы о том, как написать весь код только в одной строке, кроме двух, используя функцию внутри isset. Потому что я не знаю, даны ли дни открытия, поэтому я хочу сделать это так: 'isset ($ result ['opening_hours'] ['period'] [2] ['open'] [' время]]? $ result ['opening_hours'] ['period'] [2] ['open'] ['time']: ''; ' Но, я получаю номера в этом формате' 0000' и ​​вам нужно преобразовать это к 00:00 - Вот почему я спрашиваю. Выше было просто пример того, как это будет работать, но как я не хочу, чтобы он работал. – Musterknabe

+0

Пожалуйста, дайте ясный пример того, как ваши данные выглядят или могут выглядеть и что вы ожидаете от результата. Трудно предложить соответствующий код для обработки ваших данных, если все, что нам нужно - слишком сложный пример плохого кода. – deceze

0

РЕШЕНИЕ

$business->openingTimes['monday']  = isset($result['opening_hours']['periods'][1]['open']['time']) ? rtrim(chunk_split($result['opening_hours']['periods'][1]['open']['time'], 2, ':'), ':') : ''; 

Чтобы объяснить, что я сделал. Я спросил, установлена ​​ли переменная, и если она использует метод chunk_split, в противном случае строка будет пустой.

Смежные вопросы