23 、PHP的數據類型與常量使用
1、數據類型之間的相互轉換
一種是強制轉換:setType(變量,類型)://類型int,integer,float,double,real,bool,boolena,string,array,object
這個函數將原變量的類型改變,var dump();
一、原類型發生轉換:
(1)$str="100.12345abc"
setType($str,int);//轉換爲整型
var-dump($str);
結果爲int(100)
(2)$str="100.12345abc"
setType($str,float);//轉換爲單精度
var-dump($str);
結果爲float(100.12345)
(3)$str="100.12345abc"
setType($str,bool);//轉換爲布爾型
var-dump($str);
結果爲bool(true)//bool型非0的數都是真。
二、原類型不變,返回一個新的類型:
在賦值前使用(類型)的形式,不會改變原類型的結果
$a=(int)"123abc";
$變量=intval(變量或值);
$變量=floatval(變量或值);
$變量=stringval(變量或值);
$a=(int)"123abc";//在賦值前轉換爲整型
(1)
$str="100.12345abc"
$a=(int)$str;
var-dump($a);
var-dump($str);
結果爲100,後面是字符串。轉換類型不影響原類型。
注意:整型在內存中佔4個字節
浮點類型在內存中佔8個字節(當浮點類型轉換爲整型時,將浮點型比作臉盆,將整型比作杯子,如果臉盆的水少於或等於杯子能呈的水,那麼就不會出問題,如果臉盆裏的水多餘杯子裏的水,那麼水就會溢出,所以轉換就會出錯誤)
整型有一個最大容量,2.147e9.超過這個數值的轉換就會出錯。例如:
$float=123.456;
$int=(int)$float;
echo $int;//結果是123
如果
$float=200000004435000000000000.3424324;
那麼結果會顯示爲0.
注意:轉換浮點型,
$a="";
$int=floatval($a);
echo $int;
輸出結果爲0,變量爲空變量或者全爲字母或者在首位無數字而在中間或後面出現數字那麼結果也是0.如果在首位出現數字,例如
$a="123sadsdksdf32213";
那麼結果爲123。
後邊這個字母有個特殊法。例如
$a="123.123esadsdksdf32213";轉爲浮點型的結果爲123.123x10^5=12312300
一種是自動轉換:最常用的方式,因爲這種我們在開發時不需要去管理類型,變量會根據運行環境自動轉換
弱類型轉換;$a=10; $b="100abc" $c=true; $d=12.34;
$sun=$a+$c;//布爾型自動轉換爲數字1。結果爲11.
$sun=$a+$c+$b;//字符串自動把$b前面數字轉化爲100,結果爲111.
$sun=$a+$c+$b+$d;//浮點數是大,由小的轉換爲大的,結果爲float(123.34)
這就是自動轉換,也是PHP開發速度快的原因之一。PHP跟別的語言最主要的區別就是因爲它是弱類型。跟C/JAVA區別很大,弱類型很多時候不用管類型,它會自動轉換。
2、與變量和類型有關的一些常用函數
isset();判斷一個變量存不存在;值如果是null,也表示空
$a=" ";//只要是$a存在哪怕爲空,也會輸出“11111111111”
if(isset($a)){
echo "1111111111<br>";
}else{
echo "00000000000<br>";
}
empty();判斷一個變量是否爲空//在變量存在的情況下去判斷例如“”、“null”都是空
“null”表示變量不存在了
unset();去刪除一個變量
setType();設置類型
getType();得到類型
$a=10;
echo getType($a);//得到整型,只得到類型,沒有值
var-dump();既顯示類型又顯示值。例如:
$=10;
if(getType($a)="integer"){
echo"11111111";
}else{
echo "2222222222"
}
最好不要這樣寫,因爲這個函數知識得到類型,然而得到類型不一定去判斷,可以把它存到數據庫或其他的一切工作。我們有專門判斷類型的變量類型測試函數例如;
is_bool();
is_int();
is integer(); is long();//都是判斷整型的
is_string();
is_float();
is_array();
is_object();
is_resource();
is_null();
is_scalar();//判斷是否是標量,也就是判斷是否是整型、浮點型等等
is_numberis();//判斷是否爲任何類型的數字或者是數字字符串。
is_callable();//判斷是否是有效的函數名
例如:$a=array("one",
"two", 1, 4, 6, 8, 9);
if(is_array($a)){ //判斷數組
print_r($a); //打印數組
}else{
echo $a; //輸出變量值
}
3、常量的聲明與使用
1、常量是一個簡單值的標示符
2、常量定義後不能改變它的值,也不能使用unset()取消。
什麼時候我們用常量呢?
你如果覺得一些數據在整個項目運行過程中只用它的值不去改變它的值,這個時候最好聲明常量。變量會有被誤改的危險。
3、常量可以不予理會變量範圍的規則,而在任何地方都可以定義和訪問。常量的使用範圍要比變量要廣
例如;define("HOME", "aaaaaaaaaaaaaaaa");
$a=100;
function demo(){
global $a;//如果不加這個全局變量那麼$a不會被輸出,後期會講到
echo $a;
echo HOME;
4、常量使用define(“常量名”,"值");定義
例如:define(“HOME”,"aaaaaaaaaaa");
echo HOME;
5、常量在任何時候都不需要使用“$”,而變量在任何時候都需要使用“$”
6、常量名稱習慣都用大寫,但是小寫也能用。
7、常量的值只能用標量類型(int、float、bool等)
8、常量一定要在聲明時就給值。
9、查看常量存在不存在:defined(“常量字符串”)
define("HOME2", "aaaaaaaaaaaaaaaa");
if(defined("HOME")){
echo HOME;
}else{
define("HOME", "bbbbbbbbbbbb");//如果不存在,那麼就聲明一個
}
echo HOME;
系統還給出了預定義常量和魔術常量。有的固定常量例如;派。3.1514926
echo_file_,"<br>"
echo_line_,"<br>"//這倆都是魔術變量
$a++; //$a=$a+1; 先用變量再自增1
++$a; //$a=$a+1; 先用自增1再用變量
$a--; //$a=$a-1; 先用變量再自減1
--$a; //$a=$a-1; 先用自減1再用變量
echo $a;
$b= $a++; //b=10, a=11
$c= --$b; //c=9 , b=9
// 9 + 11
$d=$c++ + ++$c; //d=20, c=11
$e=$d-- - --$d; //d=18, e=2
$age=27;
$height=1.75;
echo '我的名子是:'.$name.'我的年齡是:'.$age.'我的身高是:'.$height.'米'.'<br>';//第二種方式,因爲單引號裏面是不能有這樣的變量的。搜易我們用連接。任何類型都可以跟字符串連接。
echo "\$age=".$age;//結果是$age=27。因爲前面那個$age前加的\,已經被轉義了,就相當於一個字符,然後與27連接起來。
$a+=10; //$a=$a+10;
$a-=10; //$a=$a-10;
$a*=10; //$a=$a*10;
$a/=10; //$a=$a/10;
$a%=10; //$a=$a%10;
$a.="abc"; //$a=$a."abc"$a連接字符串後再賦給$a
$str.='<td>';
$str.='</td>';
$str.='</tr>';
$str.='</table>';
echo $str;
if($a="100"){ //會輸出11111111
echo "111111111111111";
}else{
echo "0000000000000";
}
if($a="50"){
echo "111111111111111";
}else{
echo "0000000000000";
}//也會輸出1111111111111,因爲=是賦值語句
if($a==="100"){
echo "111111111111111";
}else{
echo "0000000000000";
}//結果是1111111111,因爲它們內容相同,類型相同。有一樣不同就會是假、
var_dump(true and false); //false
var_dump(true || false); //true
var_dump(!true); //false
var_dump(!false); //true
$email="";
if($username=="admin" && $password="123456"){
echo "用戶名和密碼輸入是正確的<br>";
}
if($username=="" || $password=="" || $email==""){
echo "所有的值一個都不能爲空<br>";
}
if((isset($email) && !empty($email)) || (isset($phone) && !empty($phone))){ //同一級不能出現不同的邏輯運算符,要想出現,只能用括號,先比較括號裏面的運算。
echo "有一種聯繫方式";
$a >>= $b;
雖然運算時是以二進制的形式,但是輸出結果依然是以整型或字符型。
&:
$b=30; // 16+8+4+2 00011110 二進制
&& ||
短路問題:&& 和 ||會發生短路
&& 在作運算時, 如果前面的數是false, 則後面是否爲true,整個表達式都是false, 所就不去執行後面的操作數。
|| 在作運算時, 如果前面的數是true, 則後面是否爲false, 整個表達式都爲true,
所就不去執行後面的操作數。
& 或 |在用運算時,兩邊都會被執行
$num=10;
if($num > 5 || $num++ < 100 ){ //結果是十。如果將||換成&,那麼結果是11,。如果將||換成|,結果又是11這是因爲短路問題。
}
echo $num;
echo $page;
echo $str;//就會輸出IP地址
echo '</pre>';