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

变量相关
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";
(0)

相关推荐

  • PHP面试常用算法(推荐)

    一.冒泡排序 基本思想: 对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样比较小(大)的数值就将逐渐从后面向前面移动. //冒泡排序 <?php function mysort($arr) { for($i = 0; $i < count($arr); $i++) { $isSort = false; for ($j=0; $j< count($arr) - $i - 1; $j++) { if($arr[$

  • PHP经典面试题集锦

    本文较为详细的分析了PHP经典面试题.分享给大家供大家参考.具体如下: 做了一下网络上的php题目,不知不觉做到现在.....把答案贴出来,供参考之用. 1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分) $a = date("Y-m-d H:i:s", strtotime("-1 day")); print_r($a); 2.echo(),print(),print_r()的区别(3分) echo 和print不是一个函数,是一个语言

  • PHP的文件操作与算法实现的面试题示例

    操作文件 1.使用5种以上的方式获取一个文件的扩展名 要求: dir/upload.image.jpg, 找出.jpg或者jpg <?php /** * 五种方式获取指定路径的文件扩展名 */ $str = "dir/upload.image.jpg"; function one ($str) { $arr = explode('.', $str); $count = count($arr); return $arr[$count - 1]; } function two ($s

  • 8个PHP数组面试题

    网上找的PHP数组题,准备自己做一遍并且记录下来. 1.写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1. 复制代码 代码如下: <?php function arrsort($first,$length){ $arr = array();         for($i=$first;$i<=$length;$i++){ $arr[] = $i*2-1;         }         return $arr;     } $arr1 = arrsort(1,10);    

  • 33道php常见面试题及答案

    1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 复制代码 代码如下: 答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2.执行程序段将输出(3). 复制代码 代码如下: 答:0 3.在HTTP 1.0中,状态码 401 的含义是(4):如果返回"找不到文件"的提示,则可用 header 函数,其语句为(5).

  • PHP经典面试题之设计模式(经常遇到)

    设计模式在面试过程中经常会提到,有时候还会让我们举例说明各种设计模式的应用场景. 使用设计模式可以减轻我们的工作量,优化我们的代码. 设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式 如果有代码有什么问题或者有更好的方式请告知,谢谢!!!!! /** * 单例模式 * @author YangYang <1812271619@qq.com> * 可以想成在一次http请求中只产生该类的一个对象(即只new classname一次) * 经典的例子是数据库连接(redis

  • PHP面试题之文件目录操作

    这道题其实并不难,考点主要在函数substr() strrchr()  array_pop()  strrpos() strpos() strrev() explode()  pathinfo(). 废话不多说了,直接给大家贴代码了. 获取文件后缀,遍历目录层次 /** * 5种方式获取文件后缀名 * 这道题其实就是考函数substr() strrchr() array_pop() strrpos() strpos() strrev() explode() pathinfo() * @param

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

    变量相关 PHP变量的内部实现 编程语言的系统类型分为强类型和弱类型两种: 强类型语言是一旦某个变量被申明为某个类型的变量,在程序运行过程中,就不能将该变量的类型以外的值赋予给它,c/c++/java等语言就属于这类 php及ruby,javascript等脚本语言就属于弱类型语言:一个变量可以表示任意的数据类型 php变量类型及存储结构 php在声明或使用变量的时候,并不需要显式指明其数据类型 php是弱类型语言,这不并表示php没有类型,在php中,存在8种变量类型,可以分为三类: 标量类型

  • 在Python中处理日期和时间的基本知识点整理汇总

    Python程序可以处理多种方式的日期和时间.日期格式之间的转换是一种常见计算机的杂活. Python的时间和日历模块,能帮助处理日期和时间. Tick是什么? 时间间隔为浮点数以秒为单位的数字.在特定的时间瞬间自上午12时00分,1970年1月1日(纪元)表示,单位为秒. Python中可用的流行时间模块,它提供功能转换.该功能time.time()返回当前系统时间,因为上午12点,1970年1月1日(时代). 例子: #!/usr/bin/python import time; # This

  • php变量与JS变量实现不通过跳转直接交互的方法

    本文实例讲述了php变量与JS变量实现不通过跳转直接交互的方法.分享给大家供大家参考,具体如下: 大家都知道如果JS变量要获取后台传来的php变量可以这么写: <?php $aaa = '111';?> var aaa = <?php echo $aaa;?>; 那么我们如何将js变量的值直接付给php变量呢 第一种方法也是最常见的方法: 无刷新:使用ajax传参 有刷新:直接跟表单一起提交或者直接跟在跳转链接的后面. 现在我来说一下第二种传值方式: 示例为对js变量进行日期处理:

  • 详细分析ASP.NET Razor之C# 变量

    变量 变量是用来存储数据的. 一个变量的名称必须以字母字符开头,并且不能包含空格或者保留字符. 一个变量可以是一个指定的类型,表示它所存储的数据类型.string 变量存储字符串值("Welcome to RUNOOB.COM"),integer 变量存储数字值(103),date 变量存储日期值,等等. 变量使用 var 关键字声明,或通过使用类型(如果您想声明类型)声明,但是 ASP.NET 通常能自动确定数据类型. // Using the var keyword: var gr

  • 关于日期正则表达式的思路详解

    1        概述 首先需要说明的一点,无论是Winform,还是Webform,都有很成熟的日历控件,无论从易用性还是可扩展性上看,日期的选择和校验还是用日历控件来实现比较好. 前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正. 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用.因应用场景的不同,写出的正则也不同,复杂程度也自然不同.正则的书写需要根据具体情况具体分析,一个基本原则就是:只写合适的,不写复杂

  • 正则应用之 日期正则表达式

    1概述 首先需要说明的一点,无论是Winform,还是Webform,都有很成熟的日历控件,无论从易用性还是可扩展性上看,日期的选择和校验还是用日历控件来实现比较好. 前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正. 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用.因应用场景的不同,写出的正则也不同,复杂程度也自然不同.正则的书写需要根据具体情况具体分析,一个基本原则就是:只写合适的,不写复杂的. 对于日期提

  • vue中如何实现变量和字符串拼接

    整理文档,搜刮出一个vue中如何实现变量和字符串拼接的代码,稍微整理精简一下做下分享. 在data中定义变量: data() { return { a: 'A' } } 如何通过按钮点击实现字符串和变量a的拼接呢? <button @click='showMsg'></button> //vue methods: { showMsg() { alert(`获取了${a}`); } } 注意alert()里不是单引号,而是两个 ` 号(esc下面的按键). 点击按钮出现 以上就是本文

  • python时间日期函数与利用pandas进行时间序列处理详解

    python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差. 下面我们先简单的了解下python日期和时间数据类型及工具 给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象 from datetime import datetime from datetime impo

  • PYTHON基础-时间日期处理小结

    步骤: 1. 掌握几种对象及其关系 2. 了解每类对象的基本操作方法 3. 通过转化关系转化 涉及对象 1. datetime >>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2018, 1, 12, 23, 9, 12, 946118) >>> type(now) <type 'datetime.datetime'&

  • Vbs脚本经典教材(最全的资料还是MSDN)

      -为什么要使用Vbs? 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动计算机第一件事情就是打开WORD,切换到你喜爱的输入法进行文本编辑,同时还要播放优美的音乐给工作创造一个舒心的环境,当然也有可能你经常需要对文本中的某些数据进行整理,把各式各样的数据按照某种规则排列起来--.这些事情重复.琐碎,使人容易疲劳. 第三方软件也许可以强化计算机的某些功能,但是解决这些重复劳动往往事倍功半,

随机推荐