получение свойства пустого объекта в php - PullRequest
0 голосов
/ 17 ноября 2011

Я извлекаю строку из БД в плагине WordPress, используя:

$ongoing_event = $wpdb->get_row('select * from wp_em_ongoing where event_id='.$EM_Event->id);   

Возвращает первую строку в виде объекта.

Позже у меня естьфлажки, которые я хочу проверить, существует ли значение в БД:

например,

<input type="checkbox" value="1" name="week_1" 
    <?php if ($ongoing_event->week_1==1) echo 'checked="checked"' ?> />

Однако, если строка не существует, я получаю сообщение об ошибке, так как не может найтисвойство для пустого объекта.

Я сделал следующее, но не уверен, есть ли лучший способ:

<input type="checkbox" value="1" name="week_1" 
    <?php if ($ongoing_event && $ongoing_event->week_1==1) echo 'checked="checked"' ?> />

У меня будет много полей ввода, которые мне нужно проверить таким образом.

Редактировать: последняя строка, которую я показал, уже работает.Тем не менее, у меня есть много таких флажков на странице.Я надеялся найти способ не проверять, является ли объект пустым для каждого вхождения.

Что я получу, есть ли способ использовать следующий блок кода без получения ошибки:

<input type="checkbox" value="1" name="week_1" 
    <?php if ($ongoing_event->week_1) echo 'checked="checked"' ?> />

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Если вас беспокоит беспорядок, вы можете использовать короткие открытые теги. вот так:

<?= ($ongoing_event && $ongoing_event->week_1 == 1) ? 'checked="checked"' : ''; ?>

Кроме того, вы можете использовать isset() или is_object(), чтобы проверить, существует ли что-то или переменная является объектом, соответственно.

Еще один способ избежать беспорядка - установить переменную вверху, например:

$set = isset($ongoing_event) && is_object($ongoing_event);

Тогда позже вы можете изменить свое выражение if на что-то вроде этого:

<?= ($set && $ongoing_event->week_1 == 1) ? 'checked="checked"' : ''; ?>

В противном случае, если все ваши флажки пронумерованы последовательно, используйте цикл:

<?php for ($ctr = 0; $ctr <= $amountOfWeeks; $ctr++): ?>
    <?php $week = 'week_' . $ctr; ?>
    <input type="checkbox" value="1" name="<?= $week; ?>" 
        <?= ($set && $ongoing_event->$week == 1) ? 'checked="checked"' : ''; ?>
<?php endfor; ?>
0 голосов
/ 17 ноября 2011

Вы всегда можете использовать PHP func isset (), чтобы определить, существует ли он, прежде чем пытаться получить к нему доступ:

if (isset($ongoing_event->week) && $ongoing_event->week_1==1)

Я бы сделал все это в самом верху, сразу после первого вызова базы данныхи поместите его в легко понятную переменную, например, так:

$weekIsOne = isset($ongoing_event->week) && $ongoing_event->week_1 == 1 ? 'checked = "checked"' : "";

И выведите $ weekIsOne ниже внутри тега элемента ввода.

0 голосов
/ 17 ноября 2011

Я в основном использую if(empty($var)), чтобы проверить, является ли переменная пустой (нужен эксперт, чтобы подтвердить, работает ли она для объектов таким же образом ...)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...