天天看點

php 修改送出資料類型,php資料類型轉換及變量與常量的差别

一.類型轉換

1.1:自動轉換

PHP屬于弱類型語言,和java,C++等語言強類型語言的差別在于:弱類型的語言是自動轉換數

據類型,例如數字字元串和數字相加,數字字元串會自動轉為數字類型:

//寫一個兩數相加的函數友善後面示範:

functionadd($a,$b){

returnvar_dump($a+$b);

};

例1:數字字元串和數字相加,數字字元串會轉為int類型:

echo add("12",16);//運算結果是int(28)

例2:布爾值的true會自動轉成:1,false會轉成0,null也是0

echo add(true,1);//int(2)

echo add(false,1);//int(1)

echo add(null,1);//int(1)

例3:如果裡面有數字和非數字字元串混合的數字字元串,會把非數字字元串丢掉,如果數字是小數,會自動轉為浮點數,但是裡面的非數字字元串不能在前

echo add("12.1212abcd",10);//float(22.1212)

echo add("abc12",1);//會報錯

1.2:臨時轉換

使用括号加目标類型進行轉換

例如:

$num1="123";

var_dump($num1);//string(3) "123"

var_dump((int)$num1);// int(123)

但是不會改變原來的值:

var_dump($num1);//string(3) "123"

進行布爾判斷時,如果是空值,可以把空值轉為bool類型:

var_dump((bool)null);//bool(false)

1.3:永久轉換: 隻針對變量

settype():第一個參數 你要改變類型的變量,第二個參數 你要改變的類型名

例如:

$price=123;

echo gettype($price);//integer

settype($price,'string');

echo gettype($price);//string

二.類型檢測

1:is_numeric():檢查參數是否是數值或數值型的字元串,例如:“10”和10,都是有效的資料,如果指定的變量是數字和數字字元串則傳回 TRUE,否則傳回 FALSE。

寫一個檢測函數來示例:

functionexamin($a){

if(!is_numeric($a)){

return$a."不是數字類型";

}else{

return$a."是數字類型";

}

};

echo examin(123);//123是數字類型

echo examin("123");//123是數字類型

echo examin("123abc");//123abc不是數字類型

echo examin("abc123");//abc123不是數字類型

類似的檢測方法還有:

is_string():是不是字元串

is_resource():是不是資源

is_array():是不是數組

is_bool():是不是布爾值

is_file():是不是檔案

is_dir():檢查指定的檔案是否是一個目錄

……

#### 2.is_scalar(): 檢測變量類型是否是标量

标量了解為:是不是單值,例如:123,”php”,false

不是标量:[12,31,21],new class{}

例如:

var_export(is_scalar(newclass{}));//false

var_export(is_scalar(1));//true

三.變量與常量

1.變量:

變量就是代碼中需要暫存的資料,變量名僅允許英文字母,數字,下劃線,并禁止數字開頭,不能使用保留字和預定義的,必須以$為字首,并嚴格區分大小寫

1.2:可變變量:

在變量前面加上兩個name,這表示可變變量,可以動态的設定和使用,先設定一個普通變量,一個可變變量會擷取了一個普通變量的值作為這個可變變量的變量名,說起來很繞,可以用代碼玩一下:

$a='c';

$c='a';

echo $a;//c

echo $$a;//a

**2.變量的指派:

2.1預設是值傳遞:

$num1=100;

$num2=$num1;

echo $num2;//100

$num1=99;

echo $num2;//100

2.2:引用指派:引用指派其實就是給原始變量起一個别名,并未建立新變量,方法是在變量前加一個”&”

$num1=100;

$num2=&$num1;

echo $num2;//100

$num1=99;

echo $num2;//99

2.預定義變量:

在官方的文檔中,預定義變量有下面這些:

超全局變量 — 超全局變量是在全部作用域中始終可用的内置變量

$GLOBALS — 引用全局作用域中可用的全部變量

$_SERVER — 伺服器和執行環境資訊

$_GET — HTTP GET 變量

$_POST — HTTP POST 變量

$_FILES — HTTP 檔案上傳變量

$_REQUEST — HTTP Request 變量

$_SESSION — Session 變量

$_ENV — 環境變量

$_COOKIE — HTTP Cookies

$php_errormsg — 前一個錯誤資訊

$http_response_header — HTTP 響應頭

$argc — 傳遞給腳本的參數數目

$argv — 傳遞給腳本的參數數組

這裡我們隻拿一小部分來舉例:

通過$GLOGALS通路任何變量:

//$GLOBALS:

$name="法外狂徒張三";

echo $GLOBALS['name'];//法外狂徒張三

擷取ip位址:

$_SERVER["REMOTE_ADDR"];

URL:

$_SERVER["REQUEST_URI"];

路徑資訊:

$_SERVER["PATH_INFO"];

請求開始時的時間戳:

$_SERVER["REQUEST_TIME"];

目前腳本名稱:

$_SERVER["PHP_SELF"];

3.常量

常量是一個簡單值的辨別符(名字)。如同其名稱所暗示的,在腳本執行期間該值不能改變。常量預設為大小寫敏感。傳統上常量辨別符總是大寫的。

常量名和其它任何 PHP 标簽遵循同樣的命名規則。合法的常量名以字母或下劃線開始,後面跟着任何字母,數字或下劃線。

常量有兩種聲明方法:define(),const.他們之間的差别是:const運作在編譯階段,define()運作階段才建立常量

注意:在if()和function(){}裡面隻能用defined()建立常量,const隻支援字面量,不允許表達式,define()允許表達式,但是它們都是支援數組的

define('PROVINCE',"Sichuan");

constGENDER="male";

define('ARR1',[1,2,3]);

echo ARR1[0];//1

echo"

";

echo GENDER;//male

if(true){

define("NAME","Jasper");

};

echo NAME;//Jasper