15
回答
PHP新手问题
华为云实践训练营,热门技术免费实践!>>>   

<?php
$a=@$_GET["a"];
if($a==null)
	echo "未输入值";
else
{
	if((string)((int)$a)!==$a)
		echo $a."不是整数";
	else
		{
		if($a%2==0)
			echo $a."是偶数";
		else
			echo $a."是奇数";
			}
	}

?>

第二行中   $a=@$_GET["a"]; 中的“@”有什么作用?

书上写的是可以防止a的值为空时产生一个警告提示

具体是什么警告提示呢?

为啥我不加@也没有警告啊?

PHP
举报
HaoLiang
发帖于7年前 15回/531阅
共有15个答案 最后回答: 7年前

$a = @$_GET["a"] 这句加不加@都是一样效果,因为$_GET是全局变量,不是函数。

判断变量是否为 null 应该用 is_null 函数。

估计楼主贴的代码是纠错题吧?

如果你的 $_GET['a'] 在传参的时候没有传 a 这个变量名,那么会出警告。例如:

index.php?b=cc

而你去  $_GET['a']会出警告。

如果传了这个参数名,则不会,例如: index.php?a= 

去掉警告报错的

@代价很高,编程者尽量不要用这个。

而是这样写 if(isset($_GET["a"])) $a=@$_GET["a"];

不加@没有报错是你设置的报警级别高了

用error_reporting(E_ALL),再输出你就看到了报警了

是一个notice,提示你a这个index没有定义

引用来自#2楼“张敏峰”的帖子

$a = @$_GET["a"] 这句加不加@都是一样效果,因为$_GET是全局变量,不是函数。

判断变量是否为 null 应该用 is_null 函数。

估计楼主贴的代码是纠错题吧?

为何全局变量和函数不同呢?网上搜不到这个@的用法。。

引用来自#3楼“奥特一点也不慢”的帖子

如果你的 $_GET['a'] 在传参的时候没有传 a 这个变量名,那么会出警告。例如:

index.php?b=cc

而你去  $_GET['a']会出警告。

如果传了这个参数名,则不会,例如: index.php?a= 

我试了一下~index.php?b=cc 还是没警告啊。。那个网页还是显示“未输入”~晕了~

引用来自#4楼“古欣”的帖子

去掉警告报错的

@代价很高,编程者尽量不要用这个。

而是这样写 if(isset($_GET["a"])) $a=@$_GET["a"];

我好像明白点了~

这里的报错就是a没有定义是吧?

引用来自#5楼“封心”的帖子

不加@没有报错是你设置的报警级别高了

用error_reporting(E_ALL),再输出你就看到了报警了

是一个notice,提示你a这个index没有定义

请问这个error_reporting(E_ALL)在哪里设置啊?是在VS里面设置么?

第一次用。。什么都不会。。不好意思哈。。

引用来自#9楼“HaoLiang”的帖子

引用来自#5楼“封心”的帖子

不加@没有报错是你设置的报警级别高了

用error_reporting(E_ALL),再输出你就看到了报警了

是一个notice,提示你a这个index没有定义

请问这个error_reporting(E_ALL)在哪里设置啊?是在VS里面设置么?

第一次用。。什么都不会。。不好意思哈。。

 可以在php.ini配置里设置但参数是error_reporting  =  E_ALL

也可以在php代码里加error_reporting(E_ALL);

引用来自#4楼“古欣”的帖子

去掉警告报错的

@代价很高,编程者尽量不要用这个。

而是这样写 if(isset($_GET["a"])) $a=@$_GET["a"];

$a = isset($_GET['a']) ? $_GET['a'] : null;

这样子写不是更好?

顶部