How to set PHP not to check undefind index for $_GET when E_NOTICE is on?
When E_NOTICE is set to on, PHP will report undefined index for arrays. I want to suppress this error for $_GET
only. Is there any way to do that other than prepend every $_GET[]
开发者_运维知识库with @
?
The proper solution is to use something like isset or array_key_exists first, thus making sure your code successfully handles things when the array index is outright missing, as opposed to ''
or zero:
$foo = array_key_exists('foo', $_GET) ? $_GET['foo'] : 'Whoops!';
The best method is to check for the existence of the array key before you use it each time, using isset
.
So instead of
$cow=(int)$_GET['cow'];
do
if(isset($_GET['cow'])){ $cow=(int)$_GET['cow']; }
That's verbose, however. So, you can wrap this in a function such as
function get($key_name){
return isset($_GET[$key_name])?$_GET[$key_name]:null;
}
and then,
$cow=get('cow');
If you don't want to modify all the $_GET references in your code, you could create your own error handler to PHP, by using set_error_handler
function
Example (completely untested, but shows the idea):
function myErrHandler ($errno, $errstr, $errfile, $errline) {
if(strstr("GET", $errstr)) {
// suppress message
return true;
}
// otherwise, continue with PHP internal error handler
return false;
}
set_error_handler("myErrHandler", E_NOTICE);
精彩评论