Выражение возвращает true, когда один из элементов не задан. Массив объектов - PullRequest
0 голосов
/ 12 сентября 2018
if(isset($cat[$k]->id) && $cat[$k]->id==$nav[$lvl-1]->id) // = false 

Но

if($cat[$k]->id==$nav[$lvl-1]->id) // = true

Как это возможно?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Нахожу хорошее решение: для свойства объекта лучше использовать функцию property_exists () - http://php.net/manual/en/function.property-exists.php

Функция property_exists () возвращает TRUE, даже если свойство имеет значение NULL. В любом случае, спасибо за комментарии пользователей, лучше знать, что isset () возвращает false, чем аргумент имеет значение NULL.

0 голосов
/ 12 сентября 2018

Ваш код, вероятно, прав, но ваши утверждения возвращают ложное значение.

Вам необходимо отладить его.

Я напишу вам пример того, как это сделать, включая документацию.

Пример:

$test1 = false;
$test2 = null;
$test3 = [];
$test4 = 'asd';
$test5 = 1;

if ($test1)
{
    echo 'Valid';
}
else
{
    echo 'False';
}
// Output: 'False'
// This is because $test1 = false. The if statement will check if $test1 is set/true and not false.

if ( ! $test2)
{
    echo 'NULL';
}
else
{
    echo 'NOT NULL';
}
// Output: 'NULL'
// $test2 is NULL/EMPTY (NULL = not valid)
// For the if( ! ..) part, will say if not.

if (is_array($test3))
{
    echo 'Is array';
}
else
{
    echo 'Is not an array';
}
// Output: 'Is array'
// [] is short for array(); $test3 is an array, so your if statement will continue as valid.

if ( ! empty($test4) || is_integer($test5))
{
    echo 'Valid';
}
else
{
    echo 'Is not valid';
}
// Output: 'Valid'
// Both $test4 and $test5 pass the if statement. Because $test4 is not empty OR $test5 is an integer.

Относится к вашему коду:

<code>echo '<pre>';
var_dump($cat[$k]);
echo '
';умереть;if (isset ($ cat [$ k] -> id) && $ cat [$ k] -> id == $ nav [$ lvl-1] -> id);

Вам необходимо «отладить» свой код.Вам необходимо установить $cat[$k]->id, если он не установлен, он вернет false.

Во время отладки вы проверяете, правильно ли анализируются данные.

Документация:


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

Удачи!

...