电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP中強制類型轉換的示例詳解

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

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

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

上述代碼中,方法參數中定義了參數的類型,包括一個int類型的a和一個float類型的b。然后在方法后面定義了方法的返回值必須是int類型。我們知道,如果計算表達式中出現了float類型,那么計算結果會變成float類型。這個方法需要返回的是一個int類型。因此我們使用了一個強制類型轉換(int)。在定義了參數類型和返回值類型后,如果傳遞或者返回的類型不一致,就會報錯。

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

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

我們通過(int)、(float)、(bool)等就可以實現PHP的類型強制轉換,和C基本上一樣。文檔中關于可以強制轉換的包括如下類型:

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

如果是布爾值,轉換結果為false變成0,true變成1

如果是float,向下取整,如7.99會轉換為7

如果是字符串,字符串從頭開始查找,開頭第一個是數字會直接變成該轉換結果,如果開頭沒有數字返回0

其他類型轉換在文檔中并沒有定義,文檔提示為“沒有定義從其它類型轉換為整型的行為。不要依賴任何現有的行為,因為它會未加通知地改變。”,但我們通過測試,可以發(fā)現對于其他類型的轉換是通過多次的類型轉換達成的,比如數組類型轉換為int類型,是根據數組是否包含內容轉換為bool類型后再轉換為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)

當轉換為 boolean 時,以下值被認為是 FALSE:

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

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

這里需要注意的是,負數也會是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轉換為空字符串'',true轉換為'1' int或float類型,轉換為字符串形式的字面量,如1轉換為'1' 數組和對象分別轉換為'Array'和'Object'字面量 資源類型會被轉換為'Resource id #1'形式的字面量 NULL轉換為空字符串''

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

注:測試結果,對象類型需要實現__tostring()魔術函數,否則報錯無法轉換為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 類型,如果將一個值轉換為數組,將得到一個僅有一個元素的數組,其下標為 0,該元素即為此標量的值。換句話說(array)scalarValue 與 array(scalarValue) 是完全一樣的

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

將 NULL 轉換為 array 會得到一個空的數組

// (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)

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

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

// (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 將一個變量轉換為 null 將不會刪除該變量或 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)

將所有類型轉換為二進制字符串。二進制字符串是區(qū)別于傳統(tǒng)常用的普通php的Unicode字符串。二進制字符串是字節(jié)字符串,沒有字符集。具體的區(qū)別就類似于數據庫中的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());

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

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

測試代碼:

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

總結

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

標簽: PHP
相關文章:
主站蜘蛛池模板: 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 杭州|上海贴标机-百科 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 金联宇电缆总代理-金联宇集团-广东金联宇电缆实业有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 硬齿面减速机_厂家-山东安吉富传动设备股份有限公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 真空上料机(一种真空输送机)-百科 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 冷凝锅炉_燃气锅炉_工业燃气锅炉改造厂家-北京科诺锅炉 | 小威小说网 - 新小威小说网 - 小威小说网小说搜索引擎 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 硅胶管挤出机厂家_硅胶挤出机生产线_硅胶条挤出机_臣泽智能装备 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | ORP控制器_ORP电极价格-上优泰百科| YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 医养体检包_公卫随访箱_慢病随访包_家签随访包_随访一体机-济南易享医疗科技有限公司 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 哈尔滨发电机,黑龙江柴油发电机组-北方星光 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 保健品OEM贴牌代加工厂家_德州健之源| 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 造价工程师网,考试时间查询,报名入口信息-网站首页 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 |