我是最棒的程序员
2015-01-05 18:52
请教大神们一个问题:
直接上代码吧,
< ?php
$p="";
//定义圆周率的两种取值
define("PI1",3.14);
define("PI2",3.142);
//定义值的精度
$height = "中";
//根据精度返回常量名,将常量变成了一个可变的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area=constant($p)*$r*$r;
$area2=$p*$r*$r;//直接将得到的变量值进行计算。
echo $area;
echo "</br>";
echo $area2;//搞不懂为什么在这里$p的值还是null,没有传入呢?
?>
为什么显示的结果会是:
3.14
0
呢?怎么不是
3.14
3.14
呢?
首先,非常感谢sophia的耐心解答,也非常感谢她的代码!
<?php
$foo = 1 + "10.5" ;
echo $foo."</br>";
$foo = 1 + "-1.3e3" ;
echo $foo."</br>";
$foo = 1 + "bob-1.3e3" ;
echo $foo."</br>";
$foo = 1 + "bob3" ;
echo $foo."</br>";
$foo = 1 + "10 Small Pigs" ;
echo $foo."</br>";
$foo = 4 + "10.2 Little Piggies" ;
echo $foo."</br>";
$foo = "10.0 pigs " + 1 ;
echo $foo."</br>";
$foo = "10.0 pigs " + 1.0 ;
echo $foo."</br>";
?>
输出结果是:
11.5
-1299
1
1
11
14.2
11
11
根据这个输出结果,我知道了:
1、开始的那段代码是将字符串“PI1”本身赋值给了$p;
2、当字符串与整型、单精度浮点型、双精度浮点型的数据一起四则运算(+-*/)时。首先要将字符串进行一种转化,运算结果有以下几种情况:
一、当字符串首不包含数字,字符串默认转化为数值0。
二、当字符串首包含数字时,如果是浮点型数据,且小数部分不为0,那么默认的运算结果会自动转化为浮点型数据。
三、当字符串首包含数字时,如果是浮点型数据,且小数部分为0,那么默认的运算结果就会显示为整型数据(系统默认变量的类型)。
3、字符串中间有数值,不影响上面1、2点的结果,即只要字符串首不包含数值,字符串还是转化为0.
4、如果变量被赋值为字符串,没有“.”连接运算符或者constant()运算符的干预,则对它进行运算时,默认会将它转化为数值进行运算。
$area2=$p*$r*$r;这个地方$p参与了运算,相当于一个字符串被当做一个数值来取值,此种情况下:
如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。
该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。
参考以下代码,对照运行结果,再理解一下:
<?php $foo = 1 + "10.5" ; $foo = 1 + "-1.3e3" ; $foo = 1 + "bob-1.3e3" ; $foo = 1 + "bob3" ; $foo = 1 + "10 Small Pigs" ; $foo = 4 + "10.2 Little Piggies" ; $foo = "10.0 pigs " + 1 ; $foo = "10.0 pigs " + 1.0 ; ?>
这个地方你没有搞清楚的是$p的值究竟是什么,echo一下$p的值,你就明白了。
PHP入门篇
455956 学习 · 6306 问题
相似问题