成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

PHP中強(qiáng)制類型轉(zhuǎn)換的示例詳解

瀏覽:186日期:2022-09-08 10:51:39
前言

學(xué)過靜態(tài)語言開發(fā)的朋友對類型轉(zhuǎn)換不會(huì)陌生,比如Java、C#、C++等。靜態(tài)語言的好處就是變量強(qiáng)制必須指定類型,這也是編譯的要求,所以大部分編譯型的語言都會(huì)有強(qiáng)制變量類型的要求。而PHP據(jù)說也會(huì)在PHP8中加入JIT實(shí)現(xiàn)編譯功能,并且在7.4中就會(huì)引入變量聲明時(shí)的類型指定。下面我們先看看目前PHP中的參數(shù)類型及返回值類型的使用。

1function add(int $a, float $b) : int{2 return (int) $a + $b;3}

上述代碼中,方法參數(shù)中定義了參數(shù)的類型,包括一個(gè)int類型的a和一個(gè)float類型的b。然后在方法后面定義了方法的返回值必須是int類型。我們知道,如果計(jì)算表達(dá)式中出現(xiàn)了float類型,那么計(jì)算結(jié)果會(huì)變成float類型。這個(gè)方法需要返回的是一個(gè)int類型。因此我們使用了一個(gè)強(qiáng)制類型轉(zhuǎn)換(int)。在定義了參數(shù)類型和返回值類型后,如果傳遞或者返回的類型不一致,就會(huì)報(bào)錯(cuò)。

參數(shù)類型和返回值類型最好在7以上的版本使用。基本類型如int、float等的參數(shù)類型聲明都是7以后才支持的,詳情參見文檔:

https://www.php.net/manual/zh/functions.arguments.php

我們通過(int)、(float)、(bool)等就可以實(shí)現(xiàn)PHP的類型強(qiáng)制轉(zhuǎn)換,和C基本上一樣。文檔中關(guān)于可以強(qiáng)制轉(zhuǎn)換的包括如下類型:

(int), (integer) - 轉(zhuǎn)換為整形 integer (bool), (boolean) - 轉(zhuǎn)換為布爾類型 boolean (float), (double), (real) - 轉(zhuǎn)換為浮點(diǎn)型 float (string) - 轉(zhuǎn)換為字符串 string (array) - 轉(zhuǎn)換為數(shù)組 array (object) - 轉(zhuǎn)換為對象 object (unset) - 轉(zhuǎn)換為 NULL (PHP 5) (binary) 轉(zhuǎn)換和 b 前綴轉(zhuǎn)換支持為 PHP 5.2.1 新增(int), (integer)

如果是布爾值,轉(zhuǎn)換結(jié)果為false變成0,true變成1

如果是float,向下取整,如7.99會(huì)轉(zhuǎn)換為7

如果是字符串,字符串從頭開始查找,開頭第一個(gè)是數(shù)字會(huì)直接變成該轉(zhuǎn)換結(jié)果,如果開頭沒有數(shù)字返回0

其他類型轉(zhuǎn)換在文檔中并沒有定義,文檔提示為“沒有定義從其它類型轉(zhuǎn)換為整型的行為。不要依賴任何現(xiàn)有的行為,因?yàn)樗鼤?huì)未加通知地改變。”,但我們通過測試,可以發(fā)現(xiàn)對于其他類型的轉(zhuǎn)換是通過多次的類型轉(zhuǎn)換達(dá)成的,比如數(shù)組類型轉(zhuǎn)換為int類型,是根據(jù)數(shù)組是否包含內(nèi)容轉(zhuǎn)換為bool類型后再轉(zhuǎn)換為int類型

// (int)(integer) var_dump((int) true); // 1var_dump((int) false); // 0 var_dump((int) 7.99); // 7 var_dump((int) '35 ok'); // 35var_dump((int) 'ok 77'); // 0var_dump((int) 'ok yes'); // 0var_dump((int) []); // 0var_dump((int) [3,4,5]); // 1(bool)(boolean)

當(dāng)轉(zhuǎn)換為 boolean 時(shí),以下值被認(rèn)為是 FALSE:

布爾值 FALSE 本身 整型值 0(零) 浮點(diǎn)型值 0.0(零) 空字符串,以及字符串 '0' 不包括任何元素的數(shù)組 特殊類型 NULL(包括尚未賦值的變量) 從空標(biāo)記生成的 SimpleXML 對象

所有其它值都被認(rèn)為是 TRUE(包括任何資源 和 NAN)

這里需要注意的是,負(fù)數(shù)也會(huì)是TRUE,只有0是FASLE

// (bool)(boolean)var_dump((bool) 0); // falsevar_dump((bool) 1); // truevar_dump((bool) -1); // truevar_dump((bool) 0.0); // falsevar_dump((bool) 1.1); // truevar_dump((bool) -1.1); // truevar_dump((bool) ''); // falsevar_dump((bool) '0'); // falsevar_dump((bool) 'a'); // truevar_dump((bool) []); // falsevar_dump((bool) [’a’]); // true$a;var_dump((bool) $a); // falsevar_dump((bool) NULL); // false(string) 布爾值,false轉(zhuǎn)換為空字符串'',true轉(zhuǎn)換為'1' int或float類型,轉(zhuǎn)換為字符串形式的字面量,如1轉(zhuǎn)換為'1' 數(shù)組和對象分別轉(zhuǎn)換為'Array'和'Object'字面量 資源類型會(huì)被轉(zhuǎn)換為'Resource id #1'形式的字面量 NULL轉(zhuǎn)換為空字符串''

直接把 array,object 或 resource 轉(zhuǎn)換成 string 不會(huì)得到除了其類型之外的任何有用信息。可以使用函數(shù) print_r() 和 var_dump() 列出這些類型的內(nèi)容

注:測試結(jié)果,對象類型需要實(shí)現(xiàn)__tostring()魔術(shù)函數(shù),否則報(bào)錯(cuò)無法轉(zhuǎn)換為string類型

// (string)var_dump((string) true); // '1'var_dump((string) false); // ''var_dump((string) 55); // '55'var_dump((string) 12.22); // '12.22'var_dump((string) [’a’]); // 'Array'class S{ function __tostring(){ return 'S'; }}var_dump((string) new S()); // 'S'var_dump((string) NULL); // ''(array)

對于任意 integer,float,string,boolean 和 resource 類型,如果將一個(gè)值轉(zhuǎn)換為數(shù)組,將得到一個(gè)僅有一個(gè)元素的數(shù)組,其下標(biāo)為 0,該元素即為此標(biāo)量的值。換句話說(array)scalarValue 與 array(scalarValue) 是完全一樣的

如果一個(gè) object 類型轉(zhuǎn)換為 array,則結(jié)果為一個(gè)數(shù)組,其單元為該對象的屬性。鍵名將為成員變量名,不過有幾點(diǎn)例外:整數(shù)屬性不可訪問;私有變量前會(huì)加上類名作前綴;保護(hù)變量前會(huì)加上一個(gè) ’*’ 做前綴。這些前綴的前后都各有一個(gè) NULL 字符

將 NULL 轉(zhuǎn)換為 array 會(huì)得到一個(gè)空的數(shù)組

// (array)var_dump((array) 1);var_dump((array) 2.2);var_dump((array) 'a');var_dump((array) true);class Arr{ public $a = 1; private $b = 2.2; protected $c = 'f';}class ChildArr extends Arr{ public $a = 2; private $d = 'g'; private $e = 1;}var_dump((array) new Arr());var_dump((array) new ChildArr());var_dump((array) null);(object)

如果將一個(gè)對象轉(zhuǎn)換成對象,它將不會(huì)有任何變化。如果其它任何類型的值被轉(zhuǎn)換成對象,將會(huì)創(chuàng)建一個(gè)內(nèi)置類 stdClass 的實(shí)例。如果該值為 NULL,則新的實(shí)例為空。array 轉(zhuǎn)換成 object 將使鍵名成為屬性名并具有相對應(yīng)的值

注意:使用 PHP 7.2.0 之前的版本,數(shù)字鍵只能通過迭代訪問

// (object)var_dump((object) 1);var_dump((object) 1.1);var_dump((object) 'string');var_dump((object) true);var_dump((object) NULL);var_dump((object) [1, 2, 3]);var_dump((object) ['a' => 1, 'b' => 2, 'c' => 3]);(unset)

使用 (unset) $var 將一個(gè)變量轉(zhuǎn)換為 null 將不會(huì)刪除該變量或 unset 其值。僅是返回 NULL 值而已

// (unset)var_dump((unset) 1);var_dump((unset) 1.1);var_dump((unset) 'string');var_dump((unset) true);var_dump((unset) null);var_dump((unset) [1, 2, 3]);var_dump((unset) new stdClass());(binary)

將所有類型轉(zhuǎn)換為二進(jìn)制字符串。二進(jìn)制字符串是區(qū)別于傳統(tǒng)常用的普通php的Unicode字符串。二進(jìn)制字符串是字節(jié)字符串,沒有字符集。具體的區(qū)別就類似于數(shù)據(jù)庫中的binary和char類型及blob和text類型

在日常的開發(fā)中基本用不到,了解即可

// (binary)var_dump((binary) 1);var_dump((binary) 1.1);var_dump((binary) 'string');var_dump((binary) true);var_dump((binary) null);var_dump((binary) [1, 2, 3]);var_dump((binary) new S());

以上就是我們的強(qiáng)制類型轉(zhuǎn)換的所有類型,其中有一些類型的轉(zhuǎn)換中提到了資源類型(Resource),但是并沒有資源類型的強(qiáng)制轉(zhuǎn)換。因?yàn)橘Y源類型大多是一些句柄操作,如數(shù)據(jù)庫鏈接、文件讀寫等,將其它類型強(qiáng)制轉(zhuǎn)換為資源類型沒有意義。

本文內(nèi)容會(huì)經(jīng)常出現(xiàn)在面試題中,而且在實(shí)際開發(fā)中的很多邏輯判斷出現(xiàn)的BUG也常常是由于PHP的自動(dòng)類型轉(zhuǎn)換所導(dǎo)致的,所以這篇文章好好收藏多拿出來看看絕對會(huì)讓你有意想不到的收獲哦!!

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/php%E4%B8%AD%E7%9A%84%E5%BC%BA%E5%88%B6%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2.php

參考文檔:

https://www.php.net/manual/zh/language.types.type-juggling.php#language.types.typecasting

總結(jié)

到此這篇關(guān)于PHP中強(qiáng)制類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)PHP強(qiáng)制類型轉(zhuǎn)換內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: PHP
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人18视频在线播放| 欧美伊人久久久久久久久影院 | 国产欧美69| 国产欧美一区二区精品性色 | 亚洲永久免费精品| 亚洲视频你懂的| 国产一区二区三区无遮挡| 2019国产精品| 99久精品国产| 国产亚洲欧洲997久久综合| 91网站在线播放| www日韩大片| 9人人澡人人爽人人精品| 日韩免费在线观看| av亚洲产国偷v产偷v自拍| 26uuu亚洲综合色欧美| 99re免费视频精品全部| 欧美一级电影网站| voyeur盗摄精品| 精品久久人人做人人爰| 9i在线看片成人免费| 国产欧美视频一区二区三区| 欧美日韩国产在线一区| 国产精品黄色在线观看| aa日韩免费精品视频一| 亚洲国产cao| 色8久久人人97超碰香蕉987| 九九热在线视频观看这里只有精品| 欧美区一区二区三区| 国产成人亚洲精品青草天美| 精品福利一区二区三区| 欧美黄污视频| 综合自拍亚洲综合图不卡区| 国产日韩欧美精品| 亚洲18女电影在线观看| 色偷偷久久人人79超碰人人澡| 免费人成网站在线观看欧美高清| 欧美另类z0zxhd电影| 成人成人成人在线视频| 国产精品视频观看| 国产一区导航| 久久精品国产77777蜜臀| 日韩亚洲欧美一区二区三区| 欧美1区2区视频| 亚洲精品ww久久久久久p站 | 91福利视频网站| 国产精品夜夜爽| 久久久久免费观看| 亚洲大胆av| 日韩一区欧美二区| 538在线一区二区精品国产| 91网页版在线| 亚洲精品成人在线| 欧美亚洲一区二区在线| av一区二区三区黑人| 国产精品久久久久影院老司| 久久国产精品久久精品国产| 国模冰冰炮一区二区| 国产亚洲女人久久久久毛片| 国产区二精品视| 久久国内精品视频| 久久色在线观看| 国产一区二区久久久| 久久成人久久爱| 国产拍欧美日韩视频二区 | 日韩欧美国产一区二区在线播放| 欧美日韩另类丝袜其他| 香蕉久久一区二区不卡无毒影院 | 久久久99精品久久| 国产视频在线观看一区 | 亚洲国产aⅴ成人精品无吗| 欧美精品成人一区二区三区四区| 欧美国产三区| 日韩精品欧美精品| 欧美精品一区二区蜜臀亚洲| 日韩亚洲国产欧美| 国产一区二区三区免费看| 国产精品日韩成人| 在线观看免费亚洲| 欧美va天堂在线| 日韩影院免费视频| 久久久久久久综合狠狠综合| 午夜在线精品偷拍| 成人涩涩免费视频| 亚洲乱码精品一二三四区日韩在线| 欧美嫩在线观看| 亚洲看片一区| 成人污污视频在线观看| 亚洲国产成人av好男人在线观看| 欧美哺乳videos| 嫩草成人www欧美| 91免费版在线| 蜜臀久久99精品久久久久久9| 日韩欧美的一区| 免费试看一区| 欧美va天堂| 激情六月婷婷综合| 亚洲精品视频在线| 精品日韩在线观看| 久久成人亚洲| 91蜜桃在线免费视频| 久色婷婷小香蕉久久| 中文字幕在线不卡| 欧美岛国在线观看| 在线亚洲一区观看| 国产精品v亚洲精品v日韩精品| 麻豆成人久久精品二区三区小说| 中文字幕一区二区三区四区不卡| 这里只有精品99re| 羞羞视频在线观看欧美| 欧美一区高清| 国产美女一区二区三区| 亚洲国产一区视频| 欧美高清在线一区| 日韩一区国产二区欧美三区| 噜噜噜躁狠狠躁狠狠精品视频 | 日韩女优视频免费观看| 久久久久99| 亚洲午夜精品一区二区| 成人免费av网站| 美国精品在线观看| 一区二区三区四区亚洲| 国产欧美一区视频| 日韩三区在线观看| 欧美唯美清纯偷拍| 久久aⅴ乱码一区二区三区| 欧美日韩国产色综合一二三四| 国产乱人伦偷精品视频免下载| 亚洲成av人在线观看| 日韩美女视频19| 国产色爱av资源综合区| 欧美一区2区视频在线观看| 一本色道久久加勒比精品 | √…a在线天堂一区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩在线播放三区四区| 亚洲一区二区三区高清不卡| 国产主播精品| 97se亚洲国产综合在线| 国产精品自拍一区| 久久电影网站中文字幕| 丝袜美腿亚洲综合| 亚洲一区在线视频观看| 亚洲色图制服丝袜| 国产欧美日韩亚州综合 | 狠狠色狠狠色综合系列| 日本女人一区二区三区| 亚洲成人先锋电影| 亚洲精品日韩一| 成人免费视频在线观看| 欧美激情一区在线| 久久久久久久综合| 精品处破学生在线二十三| 日韩免费性生活视频播放| 欧美一区二区三区小说| 7777女厕盗摄久久久| 91精品一区二区三区在线观看| 欧美日韩精品欧美日韩精品一综合| 欧美在线免费播放| 在线免费av一区| 欧美亚洲国产一区二区三区| 欧美性大战久久久| 欧美日韩综合色| 欧美自拍偷拍一区| 欧美性感一类影片在线播放| 欧美日韩中文字幕精品| 欧美日本在线看| 91精品国产综合久久久久久久久久| 欧美日产国产精品| 欧美精品日韩一区| 欧美一二三区精品| 亚洲精品在线免费播放| 久久久久久久综合| 欧美激情一区二区三区全黄| 国产精品三级在线观看| 亚洲视频小说图片| 亚洲一区二区三区四区五区黄| 亚洲最大成人综合| 亚洲国产一区二区三区| 午夜精品福利久久久| 热久久国产精品| 国产资源精品在线观看| 国产不卡在线播放| 99久久99久久精品免费观看| 91年精品国产| 激情视频一区二区| 国产日韩专区| 看欧美日韩国产| 欧美日韩精品一区二区天天拍小说| 欧美精品久久天天躁| 日韩女同互慰一区二区| 久久这里只有精品6| 国产精品国产三级国产aⅴ中文 | 欧美高清一区二区| 在线不卡视频| 免费亚洲电影| 欧美日韩你懂的| xfplay精品久久| 综合激情成人伊人| 偷拍自拍另类欧美|