<?php
function neglogic($x,$y)
{
if ($x<0.0 && $y>=0.0 )
{
$p1=("1");
}
elseif ($x<<0.0 && $y<<0.0 )
{
$p1=($x/$y);
}
if ($x==0.0 && $y>=0.0 )
{
$p1=("1");
}
elseif ($x==0.0 && $y<0.0 )
{
$p1=("0.05");
}
if ($x>0.0 && $y <=0.0)
{
$p1=("0.20");
}
elseif($x>0.0 && $y >0.0)
{
$q1=($x-$y);
if ($q1>=0)
{
$p1=("0.20");
}
if ($q1<0)
{
$p1=("1.0");
}
}
return $p1;
}
?>
这是脚本,它工作得很好,但我注意到它在(-1到-0.001)之间的值失败。
请尝试下面的操作,第二次(-.8,-2)失败,提示$pq未定义。
我知道我可以在开头定义$p1,但是我想知道为什么对于第二个数字它失败了。
<?php
echo neglogic(-8,-2);
?>
<?php
echo neglogic(-0.8,-2);
?>
In elseif ($x<<0.0 && $y<<0.0 )
"<<"在PHP中并不表示小于。意思是向左平移。
你是说左移0位吗?或者你的意思是测试低于<
如果"<<"
在代码中,则该代码是有效的,会导致意外行为。也就是一个bug。由于左移0位没有任何作用,if变成if ($x &&)$y),如果x和y在转换为布尔值时都为真,则为真。根据PHP文档,0和各种类似的值为假,其他都为真。因此,只要x和y存在且非零或均为"真",错误后面的子句就会执行。特别是,if子句可以在x或y为正数时执行,因为正值为真,如果您认为测试的值小于0,则这是无意的行为。
http://www.php.net/manual/en/language.types.boolean.php language.types.boolean.casting
http://www.php.net/manual/en/language.types.boolean.php language.types.boolean.casting
这段代码中有许多非常奇怪的样式,但最引人注目的是:
elseif ($x<<0.0 && $y<<0.0 )
你真的是指<<
-这是位左移操作符,因为它被传递0作为移位,所以它将什么也没有。
你的意思是<
,小于比较?