если всегда установлено значение true при добавлении isset - PullRequest
0 голосов
/ 31 января 2012

На первый взгляд, этот фрагмент выглядит нормально.

// my_controller.php
$data['errors'] = (object)$this->session->userdata('errors_registration');
$this->load->view('registration/my_view',$data);

// print_r($data['errors'])
// stdClass Object
// (
//    [domain_err] => 0
//    [wbholder_err] => 0
//    [methodpayment_err] => 0
//    [createaccount_err] => 2
//    [gtc_err] => 0
// )

// my_view.php
if($errors->domain_err == 1) echo "TRUE"; else echo "FALSE"; // FALSE

А когда $data['errors'] пусто,

// print_r($data['errors'])
// stdClass Object
// (
//    [scalar] => 
// )

// my_view.php
if($errors->domain_err == 1) echo "TRUE"; else echo "FALSE";

Я получаю,

Обнаружена ошибка PHP Серьезность: Сообщение с уведомлением: неопределенное свойство: stdClass :: $ domain_err

Чтобы обратиться к уведомлению, я добавил isset(), делая моисниппет теперь до if(isset($errors->domain_err) == 1), однако, так как это изменение, условие, кажется, всегда установлено в true, таким образом выводя TRUE .Есть ли другой способ преодолеть уведомление при сохранении ожидаемого условного вывода?

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Причина, по которой он всегда является истинным, заключается в том, что вы сравниваете его сейчас с тем, что возвращает функция, и это правда, потому что установлен $ errors-> domain_err. Что вам нужно сделать, это изменить условие на:

if (isset ($ errors-> domain_err) && $ errors-> domain_err == 1)

isset не возвращает значение переменной, независимо от того, существует она или нет.

2 голосов
/ 31 января 2012

, чтобы не повторять этот шаблон

if (isset($errors->domain_err) && $errors->domain_err == 1)

вы можете написать такую ​​функцию

function check_value(&$variable) {
  return (isset($variable) ? &$variable : false);
}
if (check_value($errors->domain_err)) { echo "ERROR"; }
else { echo "NO ERROR"; }
0 голосов
/ 31 января 2012

Зачем вам пытаться "преодолеть" сообщение об ошибке? Исправьте все, что вызывает ошибку. В этом случае вы ссылаетесь на члена, которого нет в используемом вами объекте. В коде, который вы разместили, я не вижу, где вы создали экземпляр класса $ errors, и вы не опубликовали какой-либо код из него. Зайдите в любой класс и посмотрите, видите ли вы определенную переменную-член с именем $ domain_err и убедитесь, что она определена как общедоступная. Лично мне не нравится предоставлять переменные-члены общедоступной области видимости, так как я предпочитаю предоставлять функцию типа get / set для установки или возврата их значений.

...