PHP的关于变量和日期处理的一些面试题目整理
变量相关
PHP变量的内部实现
编程语言的系统类型分为强类型和弱类型两种:
- 强类型语言是一旦某个变量被申明为某个类型的变量,在程序运行过程中,就不能将该变量的类型以外的值赋予给它,c/c++/java等语言就属于这类
- php及ruby,javascript等脚本语言就属于弱类型语言:一个变量可以表示任意的数据类型
php变量类型及存储结构
php在声明或使用变量的时候,并不需要显式指明其数据类型
php是弱类型语言,这不并表示php没有类型,在php中,存在8种变量类型,可以分为三类:
- 标量类型:boolean,integer,float,string
- 复合类型:array,object
- 特殊类型:resource,NULL
变量存储结构
变量的值存储到一下所示的zval结构体中.其结构如下:
typedefstruct_zval_structzval; struct_zval_struct{ zvalue_valuevalue;//存储变量的值 zend_uintrefcount__gc;//表示引用计数 zend_uchartype;//变量具体的类型 zend_ucharis_ref_gc;//表示是否为引用 };
变量的值存储在另外一个结构体zvalue_value中
变量类型
zval结构体的type字段就是实现弱类型最关键的字段了,type的值可以为:IS_NULL,IS_BOOL,IS_LONG,IS_DOUBLE,IS_STRING,IS_ARRAY,IS_OBJECT,IS_RESOURCE之一.从字面上就很好理解,他们只是类型的唯一标示,根据类型的不同将不同的值存储到value字段
变量值的存储
前面说到变量的值存储在zvalue_value结构体中,结构体定义如下:
typedefunion_zvalue_value{ longlval; doubledval; struct{ char*val; intlen; }str; HashTable*ht; zend_object_valueobj; }_zvalue_value;
日期相关
计算两个日期之间的天数
<?php /** *求两个日期之间相差的天数(针对1970年1月1日之后,求之前可以采用泰勒公式) *@paramstring$day1 *@paramstring$day2 *@returnnumber */ functiondiffBetweenTwoDays($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";