PHP не выдает никаких уведомлений для неопределенной переменной, если переменная передается в empty () или isset ()

<?php

function myFunction($yesNname) { } 

empty($noName);
print_r($noName);
isset($noName);

myFunction($noName);

вывод:

PHP Notice:  Undefined variable: noName ... on line 6 // print_r
PHP Notice:  Undefined variable: noName ... on line 9 // myFunction

Неопределенная переменная используется в empty () и isset (). Но PHP не обратил на это внимание. Почему PHP проявляет дискриминацию к некоторым функциям? Как я могу написать такую ​​функцию?


person Mohammed H    schedule 14.12.2012    source источник
comment
Какой смысл иметь функцию, проверяющую, существует ли переменная, и заставляющую ее вызывать сообщение об ошибке, когда ее не существует?   -  person Álvaro González    schedule 14.12.2012
comment
@ ÁlvaroG.Vicario Я могу это понять. Я хочу знать, как я могу написать такую ​​функцию.   -  person Mohammed H    schedule 14.12.2012
comment
Зачем тебе это нужно? Не могли бы вы обрисовать ситуацию?   -  person giorgio    schedule 14.12.2012
comment
@giorgio Я подумал, что в PHP есть какой-нибудь метод для этого.   -  person Mohammed H    schedule 14.12.2012


Ответы (3)


Ни isset(), ни empty() не являются функциями. Как объясняется в руководстве:

это языковая конструкция, а не функция

Чтобы добиться такого поведения, вам нужно настроить исходный код PHP, написанный на C.

Возможно, вы также можете получить такое поведение с помощью расширения PHP, но вам также нужно будет написать его на C и установить на свой сервер.

Обновление:

person Álvaro González    schedule 14.12.2012

Вы имели в виду как:

if(!empty($noName)) {
 // print_r
 // function($noName);
}
person Shlomo    schedule 14.12.2012
comment
Зачем мне ставить условие для вызова функции? вы видели какое-либо такое условие вокруг isset () или empty () в моем коде? - person Mohammed H; 14.12.2012
comment
Обратите внимание, что isset не требуется вместе с empty (empty уже возвращает false, если переменная не существует) - person giorgio; 14.12.2012
comment
успокойся @habeebperwad, он пытается тебе помочь ... и на самом деле прав - person giorgio; 14.12.2012
comment
@giorgio Он попытался решить проблему PHP! Он не пытался ответить на мой вопрос, как я могу написать такую ​​функцию ?. В любом случае, +1 за рассмотрение моего вопроса. - person Mohammed H; 14.12.2012
comment
Кто-то уже упоминал об этом: вы не можете. А зачем вообще? Функции уже есть, и при этом атомарны. Зачем вам копировать то, что вы можете просто использовать? - person Sébastien Renauld; 14.12.2012

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

person Valdars    schedule 14.12.2012