PHP的關(guān)于變量和日期處理的一些面試題目整理
變量相關(guān)
PHP變量的內(nèi)部實現(xiàn)
編程語言的系統(tǒng)類型分為強類型和弱類型兩種:
- 強類型語言是一旦某個變量被申明為某個類型的變量,在程序運行過程中,就不能將該變量的類型以外的值賦予給它,c/c++/java等語言就屬于這類
- php及ruby,javascript等腳本語言就屬于弱類型語言:一個變量可以表示任意的數(shù)據(jù)類型
php變量類型及存儲結(jié)構(gòu)
php在聲明或使用變量的時候,并不需要顯式指明其數(shù)據(jù)類型
php是弱類型語言,這不并表示php沒有類型,在php中,存在8種變量類型,可以分為三類:
- 標(biāo)量類型:boolean,integer,float,string
- 復(fù)合類型:array,object
- 特殊類型:resource,NULL
變量存儲結(jié)構(gòu)
變量的值存儲到一下所示的zval結(jié)構(gòu)體中.其結(jié)構(gòu)如下:
typedef struct _zval_struct zval;
struct _zval_struct {
zvalue_value value; // 存儲變量的值
zend_uint refcount__gc; // 表示引用計數(shù)
zend_uchar type; // 變量具體的類型
zend_uchar is_ref_gc; // 表示是否為引用
};
變量的值存儲在另外一個結(jié)構(gòu)體zvalue_value中
變量類型
zval結(jié)構(gòu)體的type字段就是實現(xiàn)弱類型最關(guān)鍵的字段了,type的值可以為:IS_NULL, IS_BOOL, IS_LONG, IS_DOUBLE, IS_STRING, IS_ARRAY, IS_OBJECT, IS_RESOURCE之一.從字面上就很好理解,他們只是類型的唯一標(biāo)示,根據(jù)類型的不同將不同的值存儲到value字段
變量值的存儲
前面說到變量的值存儲在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)
計算兩個日期之間的天數(shù)
<?php
/**
* 求兩個日期之間相差的天數(shù)(針對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)文章
Laravel 讀取 config 下的數(shù)據(jù)方法
今天小編就為大家分享一篇Laravel 讀取 config 下的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
無需數(shù)據(jù)庫在線投票調(diào)查php代碼
這篇文章主要為大家詳細介紹了無需數(shù)據(jù)庫在線投票調(diào)查php代碼2016-07-07
vscode運行php報錯php?not?found解決辦法
這篇文章主要給大家介紹了關(guān)于vscode運行php報錯php?not?found的解決辦法,這個問題可能是由于您的計算機上沒有安裝PHP或者VS?Code沒有正確配置PHP的路徑所導(dǎo)致的,文中將解決的辦法介紹的很詳細,需要的朋友可以參考下2023-07-07

