婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP中強制類型轉換的示例詳解

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

熱門標簽:OMG地圖標注app 地圖標注視頻廣告入駐 ai電話機器人加盟代理 電銷機器人便宜的有嗎 400電話鄭州申請 中原區電話機器人價格 gps 地圖標注軟件 黔江400電話如何辦理 招標自動語音外呼系統

前言

學過靜態語言開發的朋友對類型轉換不會陌生,比如Java、C#、C++等。靜態語言的好處就是變量強制必須指定類型,這也是編譯的要求,所以大部分編譯型的語言都會有強制變量類型的要求。而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

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

// (int)(integer)
 
var_dump((int) true); // 1
var_dump((int) false); // 0
 
var_dump((int) 7.99); // 7
 
var_dump((int) "35 ok"); // 35
var_dump((int) "ok 77"); // 0
var_dump((int) "ok yes"); // 0

var_dump((int) []); // 0
var_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); // false
var_dump((bool) 1); // true
var_dump((bool) -1); // true

var_dump((bool) 0.0); // false
var_dump((bool) 1.1); // true
var_dump((bool) -1.1); // true

var_dump((bool) ""); // false
var_dump((bool) "0"); // false
var_dump((bool) "a"); // true

var_dump((bool) []); // false
var_dump((bool) ['a']); // true

$a;
var_dump((bool) $a); // false
var_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)

如果將一個對象轉換成對象,它將不會有任何變化。如果其它任何類型的值被轉換成對象,將會創建一個內置類 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)

將所有類型轉換為二進制字符串。二進制字符串是區別于傳統常用的普通php的Unicode字符串。二進制字符串是字節字符串,沒有字符集。具體的區別就類似于數據庫中的binary和char類型及blob和text類型

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

// (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),但是并沒有資源類型的強制轉換。因為資源類型大多是一些句柄操作,如數據庫鏈接、文件讀寫等,將其它類型強制轉換為資源類型沒有意義。

本文內容會經常出現在面試題中,而且在實際開發中的很多邏輯判斷出現的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強制類型轉換內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PHP 變量類型的強制轉換
  • 淺談PHP強制類型轉換,慎用!
  • php foreach 參數強制類型轉換的問題
  • 解析PHP強制轉換類型及遠程管理插件的安全隱患
  • PHP數組Key強制類型轉換實現原理解析

標簽:池州 北京 日照 那曲 濟源 孝感 哈密 阿里

巨人網絡通訊聲明:本文標題《PHP中強制類型轉換的示例詳解》,本文關鍵詞  PHP,中,強制,類型,轉換,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP中強制類型轉換的示例詳解》相關的同類信息!
  • 本頁收集關于PHP中強制類型轉換的示例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久亚洲精精品中文字幕早川悠里 | 久国产精品韩国三级视频| 日韩午夜三级在线| 欧美一区二区三级| 日韩午夜在线观看视频| 中文字幕av不卡| 天天操天天干天天综合网| 色综合一区二区三区| 色呦呦一区二区三区| 欧美刺激午夜性久久久久久久| 国内精品国产成人国产三级粉色| 91麻豆精品国产91久久久 | 成人免费一区二区三区在线观看| 首页综合国产亚洲丝袜| 久久精品理论片| 欧美日韩中文字幕一区二区| 亚洲一区在线观看免费| 欧美日韩国产一级| 麻豆成人免费电影| 国产欧美日本一区视频| 99精品视频一区二区| 国产精品久久久久影院亚瑟| 欧美一区二区三区思思人 | 亚洲精品在线三区| 一区精品在线播放| 久久精品这里都是精品| 久久一夜天堂av一区二区三区| 日本高清不卡视频| 国产成人高清在线| 夜夜爽夜夜爽精品视频| 51精品久久久久久久蜜臀| 亚洲超丰满肉感bbw| 日韩精品在线看片z| 久色婷婷小香蕉久久| 91影院在线免费观看| 日本不卡一区二区| 精品久久久久久综合日本欧美| 99综合影院在线| 亚洲mv在线观看| 中文字幕成人网| 在线观看亚洲专区| 成人午夜碰碰视频| 亚洲精品少妇30p| av在线不卡观看免费观看| 久久成人综合网| 中文字幕亚洲不卡| 国产日本亚洲高清| 欧美日韩国产综合视频在线观看| a在线播放不卡| 蜜臀av一级做a爰片久久| 日韩视频免费观看高清完整版| 日韩av一级电影| 狠狠色丁香久久婷婷综合丁香| 欧美日韩国产电影| 丝袜诱惑亚洲看片| 久久亚洲精华国产精华液 | 亚洲综合一区二区三区| 成人综合婷婷国产精品久久免费| 中文字幕不卡在线观看| 91精品国产综合久久久蜜臀粉嫩 | 欧美午夜片在线观看| 国产精品欧美一级免费| 暴力调教一区二区三区| 亚洲小说欧美激情另类| 欧美无乱码久久久免费午夜一区| 久久精品久久久精品美女| 国产精品网曝门| 欧美日韩高清在线| 成人午夜电影久久影院| 日韩电影在线一区| 亚洲综合在线五月| 亚洲欧洲制服丝袜| 欧美va亚洲va国产综合| 北岛玲一区二区三区四区| 免费在线观看日韩欧美| 成人免费视频在线观看| 国产91丝袜在线播放0| 欧美色区777第一页| 国产盗摄精品一区二区三区在线| 亚洲午夜免费福利视频| 欧美中文字幕不卡| 无码av中文一区二区三区桃花岛| 老司机一区二区| 午夜精品久久一牛影视| 亚洲最色的网站| 成人免费在线视频| 中文字幕国产一区二区| 亚洲欧美另类久久久精品2019| 久久久精品蜜桃| 免费视频最近日韩| 亚洲国产精品一区二区www在线| 亚洲人成在线观看一区二区| 国产精品久久久久影院亚瑟| 在线日韩一区二区| 成人av在线资源网站| 成人一级片在线观看| 国产成人精品免费视频网站| 欧美在线制服丝袜| 国内外成人在线| 亚洲午夜久久久久| 国产一区二区美女| 国产麻豆91精品| 97aⅴ精品视频一二三区| 99久久精品免费看国产免费软件| 国产精品一区二区x88av| 亚洲高清免费在线| 亚洲成人黄色小说| 成人精品一区二区三区中文字幕| 高清在线成人网| 日韩视频永久免费| 久久精品免视看| 日韩精品一级中文字幕精品视频免费观看 | 国产精品99久| 欧美日韩国产另类一区| 91香蕉视频污| 久久综合丝袜日本网| 久久亚洲一区二区三区四区| 亚洲成av人影院在线观看网| 最新热久久免费视频| 亚洲一区二区中文在线| 亚洲视频在线观看一区| 国产剧情一区二区| 成人网男人的天堂| 精品国产乱码久久久久久牛牛| 精品久久久久久无| 午夜精品aaa| 狠狠色伊人亚洲综合成人| 欧美年轻男男videosbes| 91精品久久久久久蜜臀| 国产精品成人免费在线| 国产成人精品综合在线观看| 欧美无砖专区一中文字| 国产大陆亚洲精品国产| 91精品黄色片免费大全| 久久理论电影网| 免费观看成人av| 美国毛片一区二区| 日韩精品一区二区三区视频在线观看| 亚洲女同一区二区| 色偷偷成人一区二区三区91 | 日韩美女精品在线| 精品在线免费视频| 亚洲精品在线观看网站| 午夜欧美在线一二页| 欧美专区日韩专区| 国产精品久久久久久久久免费桃花 | 麻豆91在线播放| 欧美性淫爽ww久久久久无| 亚洲精品日韩一| www.亚洲精品| 欧美一区二区在线视频| 麻豆视频观看网址久久| 欧美日韩精品免费观看视频| 免费在线欧美视频| 538prom精品视频线放| 免费观看久久久4p| 欧美精品色综合| 国产一区二区三区免费看 | 久久亚洲精品小早川怜子| 亚洲福利视频三区| 99久久国产综合色|国产精品| 亚洲精品国产成人久久av盗摄| 成人黄色在线看| 欧美精品三级在线观看| kk眼镜猥琐国模调教系列一区二区| 91网页版在线| 欧美妇女性影城| 国产91丝袜在线播放0| 美女一区二区久久| 麻豆国产精品一区二区三区| 男女男精品网站| 国产成人自拍在线| av成人免费在线| 99久久精品费精品国产一区二区| av网站免费线看精品| 日韩欧美激情一区| 国产一区不卡在线| 中文字幕成人av| 欧美一区三区四区| 国产乱码精品一品二品| 欧美日本免费一区二区三区| 亚洲国产日韩一区二区| 国产一区二区不卡| 91女厕偷拍女厕偷拍高清| 波多野结衣中文一区| youjizz国产精品| 日韩欧美国产系列| 亚洲一区二区三区四区的| 亚洲视频精选在线| 国产最新精品精品你懂的| 99久久久久久| 欧美xxxx在线观看| 一区二区三区在线视频免费| 狠狠色丁香婷婷综合久久片| 在线观看网站黄不卡| 国产目拍亚洲精品99久久精品| 日韩你懂的在线播放| 欧美国产激情二区三区| 91在线小视频| 国产欧美视频一区二区三区|