<commit_before>---
layout: post
title: 常见的PHP面试题
catgroy: THINK
---
* ###PHP是什么？  
  
>PHP原始为Personal Home Page的缩写，已经正式更名为 "PHP: Hypertext Preprocessor"（超文本预处理器）。由<NAME>在1995年创建。

* ###empty，isset，is_null 区别
 
>1. 返回结果：empty与if()完全相反，is_null与isset完全相反
>2. 内核：isset是语句,is_null是函数，因此isset执行速度远远大于isnull
>3. 调用：因为是函数，is_null可以作为可变函数调用，也可以接受函数返回值作为参数，isset统统不行。
>4. 代替方法：同样因为执行速度，建议使用 “=== NULL” 来代替isnull
>5. 什么时候用哪个呢？我的建议是哪个方便用哪个。

* ###print，print_r,echo区别
 
 >1. 内核：print,echo是PHP本身的一种语言结构，print_r是函数。
  2. 用途：print，echo只能输出字符串，print_r可以打印数组结构。
  3. 调用方法：echo可以带多个参数，其他两个只能带一个参数。
  
* ###要求：dir/upload.image.jpg，找出 .jpg 或者 jpg 
  
    {% highlight php %}
     <?php
		$file='dir/upload.image.jpg';

		echo substr(strrchr($file, '.'),1)."\n";
		
		echo substr($file,strrpos($file, '.')+1)."\n";
		
		echo end(explode('.', $file))."\n";

		$info = pathinfo($file);
		echo $info["extension"]."\n";

		echo pathinfo($file, PATHINFO_EXTENSION);
	?>
	{% endhighlight %}
	
* ###求两个日期的差数，例如 2007-2-5 ~ 2007-3-6  的日期差数
 

	
* ###实现不使用第3个变量，交换$a、$b的值，$a、$b的初始值自己定

	
* ###字符串“open_door” 转换成 “OpenDoor”


	
* ###用PHP写出显示客户端IP与服务器IP的代码



* ###语句include和require的区别是什么?

>1. 在失败的时候：include产生一个warning，而require产生直接产生错误中断.
 2. require在运行前载入,include在运行时载入.
  <commit_msg>first post<commit_after>---
layout: post
title: 常见的PHP面试题
catgroy: THINK
---
* ###PHP是什么？  
  
>PHP原始为Personal Home Page的缩写，已经正式更名为 "PHP: Hypertext Preprocessor"（超文本预处理器）。由<NAME>在1995年创建。

* ###empty，isset，is_null 区别
 
>1. 返回结果：empty与if()完全相反，is_null与isset完全相反
>2. 内核：isset是语句,is_null是函数，因此isset执行速度远远大于isnull
>3. 调用：因为是函数，is_null可以作为可变函数调用，也可以接受函数返回值作为参数，isset统统不行。
>4. 代替方法：同样因为执行速度，建议使用 “=== NULL” 来代替isnull
>5. 什么时候用哪个呢？我的建议是哪个方便用哪个。

* ###print，print_r,echo区别
 
 >1. 内核：print,echo是PHP本身的一种语言结构，print_r是函数。
  2. 用途：print，echo只能输出字符串，print_r可以打印数组结构。
  3. 调用方法：echo可以带多个参数，其他两个只能带一个参数。
  
* ###要求：dir/upload.image.jpg，找出 .jpg 或者 jpg 
  
    {% highlight php %}
     <?php
		$file='dir/upload.image.jpg';

		echo substr(strrchr($file, '.'),1)."\n";
		
		echo substr($file,strrpos($file, '.')+1)."\n";
		
		echo end(explode('.', $file))."\n";

		$info = pathinfo($file);
		echo $info["extension"]."\n";

		echo pathinfo($file, PATHINFO_EXTENSION);
	?>
	{% endhighlight %}
	
* ###求两个日期的差数，例如 2007-2-5 ~ 2007-3-6  的日期差数
 
	{% highlight php %}
	 <?php
		function get_days($date1,$date2)
		{ 
			$time1=strtotime($date1);
			$time2=strtotime($date2);
			return abs($time1-$time2)/86400; 
		} 
		echo get_days('2007-2-5','2007-3-6');  
		$a=mktime(0,0,0,2,5,2007); //hour,minute,second,month,day,year
		$b=mktime(0,0,0,3,6,2007);
		echo date(‘d’,($b-$a));
    ?>
	{% endhighlight %}
	
* ###实现不使用第3个变量，交换$a、$b的值，$a、$b的初始值自己定
	
	{% highlight php %}
	 <?php
		$a=$a+$b;
		$b=$a-$b;
		$a=$a-b; 
     ?>
	{% endhighlight %}
	
* ###字符串“open_door” 转换成 “OpenDoor”

		
	{% highlight php %}
	  <?php
		foreach($arr as $v){   
		$res.=ucfirst($v);   
		}   
		return $res; 
		} 
		echo diversion('open_door'); 
		echo diversion('make_by_id');
	 ?>
 	{% endhighlight %}
	
* ###用PHP写出显示客户端IP与服务器IP的代码



* ###语句include和require的区别是什么?

>1. 在失败的时候：include产生一个warning，而require产生直接产生错误中断.
 2. require在运行前载入,include在运行时载入.
  
{'fraction_non_alphanumeric': 0.194743508549715, 'fraction_numerical': 0.031982267257758074, 'mean_word_length': 4.437177280550775, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 26, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7457323', 'n_tokens_mistral': 1887, 'n_tokens_neox': 1896, 'n_words': 187}