gettype — 獲取變量的類型php
string gettype ( mixed $var )
settype — 設置變量的類型python
bool settype ( mixed &$var , string $type )
參數 | 解釋 |
---|---|
var | 要轉換的變量。 |
type | 轉換後的數據類型 |
這是最簡單的類型。boolean 表達了真值,能夠爲 TRUE 或 FALSE。laravel
要明確地將一個值轉換成 boolean,用 (bool) 或者 (boolean) 來強制轉換。git
可是不少狀況下不須要用強制轉換,由於當運算符,函數或者流程控制結構須要一個 boolean 參數時,該值會被自動轉換。面試
當轉換爲 boolean 時,如下值被認爲是 FALSE:正則表達式
-1 和其它非零值(不論正負)同樣,被認爲是 TRUE!redis
整型值可使用十進制,十六進制,八進制或二進制表示,前面能夠加上可選的符號(- 或者 +)。docker
<?php $a = 1234; // 十進制數 $a = -123; // 負數 $a = 0123; // 八進制數 (等於十進制 83) $a = 0x1A; // 十六進制數 (等於十進制 26) $a = 0b11111111; // 二進制數字 (等於十進制 255) ?>
若是給定的一個數超出了 integer 的範圍,將會被解釋爲 float。數據庫
一樣若是執行的運算結果超出了 integer 範圍,也會返回 float。ubuntu
FALSE 將產生出 0(零),TRUE 將產生出 1(壹)。
當從浮點數轉換成整數時,將向下取整。
echo (int)3.12; # 輸出3
<?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ?>
浮點型(也叫浮點數 float,雙精度數 double 或實數 real)能夠用如下任一語法定義:
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
因此永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。
若是確實須要更高的精度,應該使用任意精度數學函數或者 gmp 函數。
echo floor((0.1+0.7)*10); # 輸出7
一個字符串 string 就是由一系列的字符組成,其中每一個字符等同於一個字節。
這意味着 PHP 只能支持 256 的字符集,所以不支持 Unicode 。
string 最大能夠達到 2GB。
不像雙引號和 heredoc 語法結構,在單引號字符串中的變量和特殊字符的轉義序列將不會被替換。
用雙引號定義的字符串最重要的特徵是變量會被解析。
轉義字符 | 含義 |
---|---|
\n | 換行(ASCII 字符集中的 LF 或 0x0A (10)) |
\r | 回車(ASCII 字符集中的 CR 或 0x0D (13)) |
\t | 水平製表符(ASCII 字符集中的 HT 或 0x09 (9)) |
\v | 垂直製表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起) |
\e | Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起) |
\f | 換頁(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起) |
\ | 反斜線 |
\$ | 美圓標記 |
\" | 雙引號 |
[0-7]{1,3} | 符合該正則表達式序列的是一個以八進制方式來表達的字符 |
\x[0-9A-Fa-f]{1,2} | 符合該正則表達式序列的是一個以十六進制方式來表達的字符 |
```php
$name = 'Hello'; echo <<<EOD 裏面的變量$name會解析。 EOD;
$name = 'Hello'; echo <<<'EOD' 裏面的變量$name不會解析。 EOD;
一個值能夠經過在其前面加上 (string) 或用 strval() 函數來轉變成字符串。
一個布爾值 boolean 的 TRUE 被轉換成 string 的 "1"。Boolean 的 FALSE 被轉換成 ""(空字符串)。
這種轉換能夠在 boolean 和 string 之間相互進行。
數組 array 老是轉換成字符串 "Array"。
資源 resource 總會被轉變成 "Resource id #1" 這種結構的字符串。
NULL 老是被轉變成空字符串。
<?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ?>
PHP 中的數組其實是一個有序映射。映射是一種把 values 關聯到 keys 的類型。
能夠用 array() 語言結構來新建一個數組。它接受任意數量用逗號分隔的 鍵(key) => 值(value)對。
<?php $array = array( "foo" => "bar", "bar" => "foo", ); // 自 PHP 5.4 起 $array = [ "foo" => "bar", "bar" => "foo", ]; ?>
key 會有以下的強制轉換
$arr = ['one'=>'First', 'two'=>'Second']; foreach ($arr as $key => $value) { echo '$key=' . "$key" . "<br>"; echo '$value=' . "$value" . "<br>"; }
要建立一個新的對象 object,使用 new 語句實例化一個類:
<?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); ?>
若是將一個對象轉換成對象,它將不會有任何變化。
若是其它任何類型的值被轉換成對象,將會建立一個內置類 stdClass 的實例。
<?php $obj = (object) array('1' => 'foo'); var_dump(isset($obj->{'1'})); // outputs 'bool(false)' var_dump(key($obj)); // outputs 'int(1)' ?>
對於其餘值,會包含進成員變量名 scalar。
<?php $obj = (object) 'ciao'; echo $obj->scalar; // outputs 'ciao' ?>
資源 resource 是一種特殊變量,保存了到外部資源的一個引用。
資源是經過專門的函數來創建和使用的。
因爲資源類型變量保存有爲打開文件、數據庫鏈接、圖形畫布區域等的特殊句柄,所以將其它類型的值轉換爲資源沒有意義。
PHP也有垃圾自動回收機制,能夠自動檢測到一個資源再也不被引用了。
持久數據庫鏈接比較特殊,它們不會被垃圾回收系統銷燬。
特殊的 NULL 值表示一個變量沒有值。NULL 類型惟一可能的值就是 NULL。
在下列狀況下一個變量被認爲是 NULL
使用 (unset) $var 將一個變量轉換爲 null 將不會刪除該變量或 unset 其值。僅是返回 NULL 值而已。
mixed 說明一個參數能夠接受多種不一樣的(但不必定是全部的)類型。
例如 gettype() 能夠接受全部的 PHP 類型,str_replace() 能夠接受字符串和數組。
number 說明一個參數能夠是 integer 或者 float。
array|object 意思是參數既能夠是 array 也能夠是 object。
void 做爲返回類型意味着函數的返回值是無用的。
void 做爲參數列表意味着函數不接受任何參數。
默認下標或帶有數字索引的數組
鍵名不爲純數字帶有指定值如標識符的數組
鍵(key)能夠是一個整數integer或字符串string
值(value)能夠是任意類型的值
$myarr['Q'] = "Q"; $myarr[] = "A"; $myarr[] = "B"; $myarr[2] = "B"; print_r($myarr); #在php中數據能夠動態改變長度。而且會默認按下標進行賦值。
#一維數組 $myarr = array("A","B","C"); foreach($myarr as $key => $value){ echo "key=".$key; echo "value=".$value; echo " "; } #多維數組,遞歸輸出數組值 function myfun(array $myarr){ foreach($myarr as $key => $value){ if(is_array($value)){ myfun($value); }else{ echo "key=".$key; echo "value=".$value; echo " "; } } } $myarr = array("A"=>array("1"=>array("a","b","c"),"2","3"),"B","C"); echo myfun($myarr)."維數組";
$myarr = array("A","B","C"); print_r(array_keys($myarr));
$myarr = array("A","B","C"); print_r(array_values($myarr));
#返回查找到的元素下標 $myarr = array("A","B","C"); echo array_search("B",$myarr);
#返回增長後數組的大小 $myarr = array("A","B","C"); echo array_push($myarr,"D"); print_r($myarr);
$myarr = array("A","B","C"); $myarr = array_chunk($myarr,2,true); print_r($myarr);
#返回刪除重複元素後的數組 $myarr = array("A","B","C","B"); print_r(array_unique($myarr)); #unset無返回值 $myarr = array("A","B","C"); unset($myarr[2]);
$myarr1 = array("one","two"); $myarr2 = array("three","four"); $myarr3 = array_merge($myarr1, $myarr2); print_r($myarr3);
#第一種轉換方式: (int) (bool) (float) (string) (array) (object) 2.$num1=3.14; 3.$num2=(int)$num1; 4.var_dump($num1); //輸出float(3.14) 5.var_dump($num2); //輸出int(3)
#第二種轉換方式: intval() floatval() strval() 2.$str="123.9abc"; 3.$int=intval($str); //轉換後數值:123 4.$float=floatval($str); //轉換後數值:123.9 5.$str=strval($float); //轉換後字符串:"123.9"
#bool settype ( mixed &$var , string $type ) type 的可能值爲: 「boolean」 (或爲「bool」,從 PHP 4.2.0 起) 「integer」 (或爲「int」,從 PHP 4.2.0 起) 「float」 (只在 PHP 4.2.0 以後可使用,對於舊版本中使用的「double」現已停用) "string" "array" "object" 「null」 (從 PHP 4.2.0 起) 2.$num4=12.8; 3.$flg=settype($num4,"int"); 4.var_dump($flg); //輸出bool(true) 5.var_dump($num4); //輸出int(12)
echo decbin(12); //輸出 1100
echo decoct(15); //輸出 17
echo dechex(10); //輸出 a
$binary = "11111001"; $hex = dechex(bindec($binary)); echo $hex;//輸出f9
echo bindec('110011'); //輸出 51
echo octdec('77'); //輸出 63
echo hexdec("F"); //輸出 15
$hexadecimal = 'A37334'; echo base_convert($hexadecimal, 16, 2);//輸出 101000110111001100110100
運算符優先級指定了兩個表達式綁定得有多"緊密"。可使用括號來強制改變優先級。
若是運算符優先級相同,則使用從左到右的左聯順序。
#自加 $a=10; echo $a++; //先用再加,最後結果爲10 echo ++$a; //先加再用,最後結果爲11 $a = 10; $b = $a+ ++++$a; echo $a; //結果爲12 echo " "; echo $b; //結果爲22 #結合性致使的問題(++的優先級比+的高,且爲右結合)