国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

從源碼角度看 PHP 字符串類型轉(zhuǎn)換

開發(fā) 前端
寫個關(guān)于 PHP 類型轉(zhuǎn)換的代碼測試一下吧,看看大家是否能知道輸出結(jié)果。

PHP 的類型轉(zhuǎn)換是比較方便的,但是越是容易使用的東西,底層的實現(xiàn)越是復(fù)雜,而且在使用中像我這樣的新手也往往不清楚轉(zhuǎn)換后的結(jié)果到底是什么。有時候,對于 Java 這種強類型的語言,使用的時候需要強制進行轉(zhuǎn)換,這樣多半轉(zhuǎn)換后的結(jié)果是可以預(yù)料的,至少自己是想這么做的。

通過實例看轉(zhuǎn)換

寫個關(guān)于 PHP 類型轉(zhuǎn)換的代碼測試一下吧,看看大家是否能知道輸出結(jié)果。把 各種數(shù)據(jù)類型 都轉(zhuǎn)換為 字符串類型試試。

<?php
$var = false;
echo '$var:', $var, "\r\n";
$var = null;
echo '$var:', $var, "\r\n";
$var = true;
echo '$var:', $var, "\r\n";
$var = 1;
echo '$var:', $var, "\r\n";
$var = 1.1;
echo '$var:', $var, "\r\n";
$var1 = &$var;
echo '$var:', $var1, "\r\n";
$var1 = 'string111';
echo '$var:', $var1, "\r\n";
$var = [1, 2, 3];
echo '$var:', $var, "\r\n";
class Obj
{
private $field;
}
$var = new Obj();
echo '$var:', $var, "\r\n";

代碼很簡單,大家可以猜猜輸出結(jié)果,然后再和運行結(jié)果比對一下,運行結(jié)果如下:

$ php string.php
$var:
$var:
$var:1
$var:1
$var:1.1
$var:1.1
$var:string111
$var:
Notice: Array to string conversion in C:\Users\Administrator\Desktop\string.php
on line 24
Call Stack:
0.0010 405568 1. {main}() C:\Users\Administrator\Desktop\string.php:0
Array
$var:
Catchable fatal error: Object of class Obj could not be converted to string in C
:\Users\Administrator\Desktop\string.php on line 32
Call Stack:
0.0010 405568 1. {main}() C:\Users\Administrator\Desktop\string.php:0

不知道是否實際的運行結(jié)果和猜測的結(jié)果是否一致。

PHP 源碼中各類型轉(zhuǎn)換為字符串類型的處理

對于各種類型之間的賦值,并轉(zhuǎn)換為字符串,使用真的是非常的方便。但是,實際的功勞都是 PHP 底層的復(fù)雜處理。看一下關(guān)于各種類型轉(zhuǎn)換為字符串類型的源代碼的處理。

ZEND_API zend_string* ZEND_FASTCALL _zval_get_string_func(zval *op) /* {{{ */
{
try_again:
switch (Z_TYPE_P(op)) {
case IS_UNDEF:
case IS_NULL:
case IS_FALSE:
return ZSTR_EMPTY_ALLOC();
case IS_TRUE:
return ZSTR_CHAR('1');
case IS_RESOURCE: {
char buf[sizeof("Resource id #") + MAX_LENGTH_OF_LONG];
int len;
len = snprintf(buf, sizeof(buf), "Resource id #" ZEND_LONG_FMT, (zend_long)Z_RES_HANDLE_P(op));
return zend_string_init(buf, len, 0);
}
case IS_LONG: {
return zend_long_to_str(Z_LVAL_P(op));
}
case IS_DOUBLE: {
return zend_strpprintf(0, "%.*G", (int) EG(precision), Z_DVAL_P(op));
}
case IS_ARRAY:
zend_error(E_NOTICE, "Array to string conversion");
return zend_string_init("Array", sizeof("Array")-1, 0);
case IS_OBJECT: {
zval tmp;
if (Z_OBJ_HT_P(op)->cast_object) {
if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, IS_STRING) == SUCCESS) {
return Z_STR(tmp);
}
} else if (Z_OBJ_HT_P(op)->get) {
zval *z = Z_OBJ_HT_P(op)->get(op, &tmp);
if (Z_TYPE_P(z) != IS_OBJECT) {
zend_string *str = zval_get_string(z);
zval_ptr_dtor(z);
return str;
}
zval_ptr_dtor(z);
}
zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %s could not be converted to string", ZSTR_VAL(Z_OBJCE_P(op)->name));
return ZSTR_EMPTY_ALLOC();
}
case IS_REFERENCE:
op = Z_REFVAL_P(op);
goto try_again;
case IS_STRING:
return zend_string_copy(Z_STR_P(op));
EMPTY_SWITCH_DEFAULT_CASE()
}
return NULL;
}
/* }}} */

從上面的源碼中可以看出,對于類型的轉(zhuǎn)換,PHP 底層的源碼使用了 switch ... case 的結(jié)構(gòu),在進行轉(zhuǎn)換的時候需要對逐個的類型進行匹配后,再進行轉(zhuǎn)換。當然,從源碼的角度去看待上面的 PHP 類型轉(zhuǎn)換的代碼就非常的清晰明了了。

最后

讀 PHP 的源碼有一段時間了,進度比較慢,說實話,對于寫 PHP 的代碼沒有什么提高,或者對我來說沒有遇到什么讓我提高的地方。單純的出于對知識求甚解的原因吧。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2020-02-04 09:53:05

數(shù)據(jù)安全數(shù)據(jù)泄漏信息安全

2019-04-28 16:10:50

設(shè)計Redux前端

2009-12-11 13:16:04

PHP查詢字符串

2009-11-24 09:55:44

PHP字符串函數(shù)

2009-11-25 09:13:41

PHP數(shù)組轉(zhuǎn)字符串PHP字符串轉(zhuǎn)數(shù)組

2020-12-14 08:03:52

ArrayList面試源碼

2020-12-17 08:03:57

LinkedList面試源碼

2015-05-05 11:04:31

CoreOS自動化運維

2022-07-15 13:01:13

Kotlin編程語言Java

2010-01-05 17:43:29

JSON字符串

2010-03-30 16:45:22

Oracle 字符串

2009-08-20 11:29:21

C#16進制字符串

2021-11-24 09:08:38

LeetCode字符串算法

2009-12-01 14:00:37

PHP字符串轉(zhuǎn)換為數(shù)值

2009-11-25 16:55:45

PHP函數(shù)explod

2009-06-05 11:16:58

字符串動態(tài)轉(zhuǎn)換

2023-10-27 07:03:22

字符串String類型

2009-12-01 10:38:08

PHP字符串函數(shù)

2009-11-18 12:38:04

PHP字符串函數(shù)

2017-09-25 16:21:30

Spark on yacluster模式
點贊
收藏

51CTO技術(shù)棧公眾號

国产乱码字幕精品高清av| 日韩欧美区一区二| 在线视频91| 综合国产在线| 国产精品久久久久久影视| 国产精品成人自拍| 国产亚洲xxx| 在线男人天堂| 精品国产第一区二区三区观看体验 | 操人视频在线观看欧美| 美女的胸无遮挡在线观看 | 欧美国产91| 91精品久久久久久久久青青| 日韩av系列| 国内精品一区二区三区四区| 国产不卡精品在线| 中文日韩在线视频| 日韩一级二级| 在线激情影院一区| 97成人超碰| 中文欧美在线视频| 国产在线视频欧美一区| 日韩三级影视基地| 日本精品国产| 欧美精品videosex性欧美| 在线日韩三级| 国内伊人久久久久久网站视频| 美女国产精品久久久| 欧美激情综合亚洲一二区 | 伊人蜜桃色噜噜激情综合| 999日本视频| 99精品国产99久久久久久福利| 国产美女精品在线观看| 国产一区二区三区的电影 | 播九公社成人综合网站| 夜夜亚洲天天久久| 亚洲综合图片| 欧美日本一区二区| mm视频在线视频| 久久久精品在线| 国产日产一区| 精品午夜一区二区三区| 韩国成人在线视频| 无需播放器的av| 亚洲成人av在线电影| 国产福利在线播放麻豆| 这里只有精品丝袜| 日韩电影不卡一区| 99久久免费国| 国产成人综合网| 国产免费视频| 欧美精品免费视频| 日韩综合久久| 91亚洲人电影| 国产一区二区三区免费| 国产无遮挡又黄又爽免费软件| 欧美日韩亚洲另类| 激情小说亚洲| 91在线免费看网站| 久久99精品久久久| 九色视频网站入口| 精品欧美黑人一区二区三区| 亚洲国产精选| 国产精品乱子乱xxxx| youjizz久久| 青檬在线电视剧在线观看| 精品国产污网站| 高清日韩中文字幕| 欧美国产视频在线观看| 久久影院电视剧免费观看| 久久99久久| 丝袜情趣国产精品| 欧美不卡在线| 女人天堂av手机在线| 色综合久久久久综合体| 欧美中文字幕精在线不卡| 国产精品丝袜一区二区三区| 精品亚洲免费视频| 在线观看入口黄最新永久免费国产| 日韩国产在线播放| 欧美人与牛zoz0性行为| 中文字幕一区二区三区乱码| 亚洲美女视频在线| 日韩免费va| 7777奇米亚洲综合久久| 26uuu色噜噜精品一区二区| 91啦中文在线| 国产成人精品视频| 成人av午夜电影| 老司机精品视频在线观看6| 91黑丝在线观看| 国产麻豆精品一区二区| 韩国免费在线视频| 97免费中文视频在线观看| 日韩国产在线观看| 久久精品蜜桃| 国产精品福利无圣光在线一区| 成人午夜视频在线| 日本aa在线| 国产一区二区三区高清| 亚洲综合久久久| 中文字幕一区二区三区日韩精品 | 男女爱爱免费网站| 亚洲欧洲一区二区三区在线观看| 五月婷婷亚洲| 羞羞小视频视频| 中文字幕亚洲天堂| 免费黄网站欧美| av中文天堂在线| 国产精品极品美女在线观看免费 | 免费在线黄网站| 欧美成人a∨高清免费观看| 亚洲国产精品久久久天堂| www99xav| 欧美激情视频一区| 成人av午夜影院| 成人免费网站视频| 天堂精品视频| 欧美丝袜丝交足nylons| 亚洲最大av| 欧美成人综合在线| 国产精品一区二区三区在线播放 | 亚洲美女黄网| 天堂av在线资源| 国产精品中文字幕久久久| 亚洲欧美日韩久久精品| 精品三级av| 午夜宅男在线视频| 欧美精品久久久久久久久久| 国产99精品在线观看| 欧美日韩视频网站| 国产va亚洲va在线va| 色综合伊人色综合网| 成人免费视频一区| 欧美成人福利| 日韩av资源在线| 欧美精品电影免费在线观看| 国产精品欧美久久久久无广告| 青草伊人久久| 二区中文字幕| 成人a在线视频| 欧美三级一区二区| 久热精品在线| 天堂电影一区| 69堂免费视频| 久久99热精品| 亚洲一区二区在线视频| 日韩欧美网站| 巨大荫蒂视频欧美另类大| 少妇精品久久久久久久久久| 国产亚洲a∨片在线观看| 久久亚洲精精品中文字幕早川悠里| 超碰成人在线观看| 亚洲网站情趣视频| 激情小说综合区| 亚洲精品美女久久| 91网上在线视频| 九九亚洲视频| 日色在线视频| 日韩欧美第二区在线观看| 国产亚洲精品久久久| 国产精品剧情在线亚洲| 伊人久久大香线| 91精品国产黑色瑜伽裤| 情侣黄网站免费看| 国产精品女视频| 日韩精品中文字幕在线一区| 9i在线看片成人免费| 日韩欧美不卡| 91破解版在线观看| 亚洲另类第一页| 国产在线资源一区| 色天天综合狠狠色| 性久久久久久久久| 国内精品伊人久久久久影院对白| 成人av地址| 国产素人视频在线观看| 成年人黄色片视频| 国产精品国产三级国产专区53| 亚洲午夜小视频| 精品欧美激情精品一区| 免费人成精品欧美精品| 女仆av观看一区| 日本免费中文字幕在线| 成人免费在线网| 亚洲伊人第一页| 日韩视频中文字幕| 91精品福利视频| 久久无码av三级| 国产一级久久| 任我爽精品视频在线播放| 超免费在线视频| 8×8x拔擦拔擦在线视频网站| 综合网五月天| 亚洲在线免费观看| 欧美成人精品在线视频| 日韩欧美激情一区| 亚洲丰满少妇videoshd| 9l国产精品久久久久麻豆| 99精品福利视频|