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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
Yii2分页的使用及其扩展方法详解
May 23 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
PHP抽象类和接口用法实例详解
Jul 20 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP大文件分割分片上传实现代码
Dec 09 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自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
JavaScript File分段上传
2016/03/10 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
中学教师岗位职责
2013/11/26 职场文书
施工员岗位职责
2014/03/16 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
2014年信访工作总结
2014/11/17 职场文书
社区低保工作总结2015
2015/07/23 职场文书
会议主持词通用版
2019/04/02 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
python中validators库的使用方法详解
2022/09/23 Python