PHP的关于变量和日期处理的一些面试题目整理


Posted in PHP onAugust 10, 2015

变量相关
PHP变量的内部实现
编程语言的系统类型分为强类型和弱类型两种:

  1.     强类型语言是一旦某个变量被申明为某个类型的变量,在程序运行过程中,就不能将该变量的类型以外的值赋予给它,c/c++/java等语言就属于这类
  2.     php及ruby,javascript等脚本语言就属于弱类型语言:一个变量可以表示任意的数据类型

php变量类型及存储结构
php在声明或使用变量的时候,并不需要显式指明其数据类型

php是弱类型语言,这不并表示php没有类型,在php中,存在8种变量类型,可以分为三类:

  1.     标量类型:boolean,integer,float,string
  2.     复合类型:array,object
  3.     特殊类型:resource,NULL

变量存储结构
变量的值存储到一下所示的zval结构体中.其结构如下:

typedef struct _zval_struct zval; 
   
  struct _zval_struct { 
    zvalue_value value; // 存储变量的值 
    zend_uint refcount__gc; // 表示引用计数 
    zend_uchar type;  // 变量具体的类型 
    zend_uchar is_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结构体中,结构体定义如下:

typedef union _zvalue_value { 
    long lval; 
    double dval; 
    struct { 
      char *val; 
      int len; 
    } str; 
    HashTable *ht; 
    zend_object_value obj; 
  } _zvalue_value;

日期相关

计算两个日期之间的天数
  

<?php 
   
  /** 
   * 求两个日期之间相差的天数(针对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";
PHP 相关文章推荐
输出控制类
Oct 09 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
检测png图片是否完整的php代码
Sep 06 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
PHP 数组黑名单/白名单实例代码详解
Jun 04 PHP
php简单检测404页面的方法示例
Aug 23 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 PHP
6个超实用的PHP代码片段
Aug 10 #PHP
解读PHP中的垃圾回收机制
Aug 10 #PHP
php实现多城市切换特效
Aug 09 #PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 #PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 #PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 #PHP
Smarty使用自定义资源的方法
Aug 08 #PHP
You might like
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
mysql 性能的检查和优化方法
2009/06/21 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php技巧小结【推荐】
2017/01/19 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
Python贪吃蛇游戏编写代码
2020/10/26 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
python中的tcp示例详解
2018/12/09 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python 解析xml文件的示例
2020/09/29 Python
Python中生成ndarray实例讲解
2021/02/22 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
中学家长会邀请函
2014/02/03 职场文书
规划编制实施方案
2014/03/15 职场文书
青奥会口号
2014/06/12 职场文书
丧事答谢词大全
2015/09/30 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书