为了账号安全,请及时绑定邮箱和手机立即绑定

请教大神们一个问题——变量传值问题

请教大神们一个问题:
直接上代码吧,
< ?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
呢?

正在回答

5 回答

首先,非常感谢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()运算符的干预,则对它进行运算时,默认会将它转化为数值进行运算。

1 回复 有任何疑惑可以回复我~

$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 ;             
?>


1 回复 有任何疑惑可以回复我~

这个地方你没有搞清楚的是$p的值究竟是什么,echo一下$p的值,你就明白了。

0 回复 有任何疑惑可以回复我~
#1

昱昱

我 echo了是PI1,但是我还是不太明白
2015-01-06 回复 有任何疑惑可以回复我~
#2

sophia_yu 回复 昱昱

$p的值是字符串“PI1”
2015-01-06 回复 有任何疑惑可以回复我~
#3

我是最棒的程序员 提问者

非常感谢您的回答,让我受益匪浅啊!
2015-01-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP入门篇
  • 参与学习       455956    人
  • 解答问题       6306    个

PHP入门教程轻松学习,行业大牛帮您快速掌握PHP编程基础知识。

进入课程

请教大神们一个问题——变量传值问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信