PHP的關(guān)于變量和日期處理的一些面試題目整理
變量相關(guān)
PHP變量的內(nèi)部實(shí)現(xiàn)
編程語(yǔ)言的系統(tǒng)類(lèi)型分為強(qiáng)類(lèi)型和弱類(lèi)型兩種:
- 強(qiáng)類(lèi)型語(yǔ)言是一旦某個(gè)變量被申明為某個(gè)類(lèi)型的變量,在程序運(yùn)行過(guò)程中,就不能將該變量的類(lèi)型以外的值賦予給它,c/c++/java等語(yǔ)言就屬于這類(lèi)
- php及ruby,javascript等腳本語(yǔ)言就屬于弱類(lèi)型語(yǔ)言:一個(gè)變量可以表示任意的數(shù)據(jù)類(lèi)型
php變量類(lèi)型及存儲(chǔ)結(jié)構(gòu)
php在聲明或使用變量的時(shí)候,并不需要顯式指明其數(shù)據(jù)類(lèi)型
php是弱類(lèi)型語(yǔ)言,這不并表示php沒(méi)有類(lèi)型,在php中,存在8種變量類(lèi)型,可以分為三類(lèi):
- 標(biāo)量類(lèi)型:boolean,integer,float,string
- 復(fù)合類(lèi)型:array,object
- 特殊類(lèi)型:resource,NULL
變量存儲(chǔ)結(jié)構(gòu)
變量的值存儲(chǔ)到一下所示的zval結(jié)構(gòu)體中.其結(jié)構(gòu)如下:
typedef struct _zval_struct zval;
struct _zval_struct {
zvalue_value value; // 存儲(chǔ)變量的值
zend_uint refcount__gc; // 表示引用計(jì)數(shù)
zend_uchar type; // 變量具體的類(lèi)型
zend_uchar is_ref_gc; // 表示是否為引用
};
變量的值存儲(chǔ)在另外一個(gè)結(jié)構(gòu)體zvalue_value中
變量類(lèi)型
zval結(jié)構(gòu)體的type字段就是實(shí)現(xiàn)弱類(lèi)型最關(guān)鍵的字段了,type的值可以為:IS_NULL, IS_BOOL, IS_LONG, IS_DOUBLE, IS_STRING, IS_ARRAY, IS_OBJECT, IS_RESOURCE之一.從字面上就很好理解,他們只是類(lèi)型的唯一標(biāo)示,根據(jù)類(lèi)型的不同將不同的值存儲(chǔ)到value字段
變量值的存儲(chǔ)
前面說(shuō)到變量的值存儲(chǔ)在zvalue_value結(jié)構(gòu)體中,結(jié)構(gòu)體定義如下:
typedef union _zvalue_value {
long lval;
double dval;
struct {
char *val;
int len;
} str;
HashTable *ht;
zend_object_value obj;
} _zvalue_value;
日期相關(guān)
計(jì)算兩個(gè)日期之間的天數(shù)
<?php
/**
* 求兩個(gè)日期之間相差的天數(shù)(針對(duì)1970年1月1日之后,求之前可以采用泰勒公式)
* @param string $day1
* @param string $day2
* @return number
*/
function diffBetweenTwoDays ($day1, $day2)
{
$second1 = strtotime($day1);
$second2 = strtotime($day2);
if ($second1 < $second2) {
$tmp = $second2;
$second2 = $second1;
$second1 = $tmp;
}
return ($second1 - $second2) / 86400;
}
$day1 = "2013-07-27";
$day2 = "2013-08-04";
$diff = diffBetweenTwoDays($day1, $day2);
echo $diff."\n";
相關(guān)文章
搭建PhpStorm+PhpStudy開(kāi)發(fā)環(huán)境的超詳細(xì)教程
這篇文章主要介紹了搭建PhpStorm+PhpStudy開(kāi)發(fā)環(huán)境的超詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
thinkPHP框架實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器示例
這篇文章主要介紹了thinkPHP框架實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器,結(jié)合實(shí)例形式分析了基于thinkPHP框架的用戶登陸、數(shù)值計(jì)算、數(shù)據(jù)庫(kù)讀寫(xiě)、歷史記錄保存等功能相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2018-12-12
淺談PHP中如何實(shí)現(xiàn)Hook機(jī)制
本篇文章主要介紹了淺談PHP中如何實(shí)現(xiàn)Hook機(jī)制,詳細(xì)的介紹了Hook機(jī)制的原理和實(shí)現(xiàn)過(guò)程,具有一定的參考價(jià)值,有興趣的可以了解一下2017-11-11
ThinkPHP防止重復(fù)提交表單的方法實(shí)例分析
這篇文章主要介紹了ThinkPHP防止重復(fù)提交表單的方法,結(jié)合實(shí)例形式分析了thinkPHP防止重復(fù)提交表單的各種常見(jiàn)操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-05-05
IIS6.0 開(kāi)啟Gzip方法及PHP Gzip函數(shù)分享
因?yàn)樵谧鲆粋€(gè)項(xiàng)目,項(xiàng)目里面服務(wù)器主要提供數(shù)據(jù),但是數(shù)據(jù)多了文件就大了,比較浪費(fèi)流量和時(shí)間,我們便用Gzip來(lái)處理。我在本機(jī)上是apache,服務(wù)器上是IIS6.0,用的是php,那么我就在這里分享一下。2014-06-06
php批量把數(shù)組中的日期時(shí)間轉(zhuǎn)為時(shí)間戳的實(shí)現(xiàn)
本文介紹了php批量把數(shù)組中的日期時(shí)間轉(zhuǎn)為時(shí)間戳的實(shí)現(xiàn),主要使用strtotime()函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
PHP實(shí)現(xiàn)RSA加解密算法示例(生成密鑰位數(shù)為1024位的方法)
下面小編就為大家分享一篇PHP實(shí)現(xiàn)RSA加解密算法示例(生成密鑰位數(shù)為1024位的方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
PHP中使用GD庫(kù)繪制折線圖 折線統(tǒng)計(jì)圖的繪制方法
本文通過(guò)代碼給大家介紹php中使用GD庫(kù)繪制折線圖,涉及到php中GD庫(kù)的一些簡(jiǎn)單使用,本文介紹的非常詳細(xì),感興趣的朋友一起學(xué)習(xí)吧2015-11-11

