Как заставить этот PHP-фрагмент работать без предупреждения? - PullRequest
0 голосов
/ 21 сентября 2009

Код короткий, но полный :

function process($obj)
{
    if(empty($obj))return 1;
    return 2;
}


echo process($arr['nosuchkey']);

Как мы все знаем, звонок по номеру empty($arr['nosuchkey']) никогда не выдаст предупреждения.

Но process($arr['nosuchkey']) сообщит об уведомлении.

Есть ли обходной путь без отключения предупреждений; скажем, по синтаксису?

Ответы [ 3 ]

4 голосов
/ 21 сентября 2009

Вы можете использовать оператор контроля ошибок @ , но это подавит гораздо больше, чем просто уведомления.

echo @process($arr['nosuchkey']);

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

if (array_key_exists('nosuchkey', $arr))
    echo process($arr['nosuchkey']);

Или передать ключ отдельно

echo process($arr, 'nosuchkey');

Убедитесь, что вы знаете разницу между empty(), isset() и array_key_exists() - они ловят много людей.

2 голосов
/ 21 сентября 2009

Попробуйте это

 function process(&$obj)

Я не уверен, что это будет работать

0 голосов
/ 21 сентября 2009

Может

function process($obj, $index = null) {
    if(is_array($obj))
    {
         if(!array_key_exists($index, $obj))
             return 1;
         else
             return 2;
    }

    if(empty($obj)) 
        return 1;

    return 2;

}

Пожалуйста, не скрывайте предупреждения с @ при любой возможности.

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