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 相关文章推荐
PHP读取XML值的代码(推荐)
Jan 01 PHP
php 数组的一个悲剧?
May 11 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 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
主流PHP框架的优缺点对比分析
2014/12/25 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
js实现转动骰子模型
2019/10/24 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
Python的另外几种语言实现
2015/01/29 Python
python 中的int()函数怎么用
2017/10/17 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
学校安全检查制度
2014/01/27 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS