請教大神們一個問題——變量傳值問題
請教大神們一個問題:
直接上代碼吧,
< ?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
呢?
2015-01-06
首先,非常感謝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()運算符的干預,則對它進行運算時,默認會將它轉化為數值進行運算。
2015-01-06
$area2=$p*$r*$r;這個地方$p參與了運算,相當于一個字符串被當做一個數值來取值,此種情況下:
如果該字符串沒有包含 '.','e' 或 'E' 并且其數字值在整型的范圍之內(由 PHP_INT_MAX 所定義),該字符串將被當成 integer 來取值。其它所有情況下都被作為 float 來取值。?
該字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值為 0(零)。合法數值由可選的正負號,后面跟著一個或多個數字(可能有小數點),再跟著可選的指數部分。指數部分由 'e' 或 'E' 后面跟著一個或多個數字構成。
參考以下代碼,對照運行結果,再理解一下:
2015-01-06
這個地方你沒有搞清楚的是$p的值究竟是什么,echo一下$p的值,你就明白了。