首页 > 代码库 > PHP面试题
PHP面试题
echo 、print、print_r、var_dump区别
- echo 和print是语言结构不是函数, 只能打印出string 和 int
- int print(string $arg]) 既然是语言结果,一次打印就没有必要加括号(print)
- print_r 只有两个参数,第二个参数用于判断是否要输出(TRUE 捕获),能打印出结构 ,且有返回值,记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
- var_dump 没有返回值,能打印出结构
strtotime(),函数的运用
echo date("Y-m-d H:i:s",strtotime("now")), "\n"; echo date("Y-m-d H:i:s",strtotime("10 September 2000")), "\n"; echo date("Y-m-d H:i:s",strtotime("+1 day")), "\n"; echo date("Y-m-d H:i:s",strtotime("+1 week")), "\n"; echo date("Y-m-d H:i:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "\n"; echo date("Y-m-d H:i:s",strtotime("next Thursday")), "\n"; echo date("Y-m-d H:i:s",strtotime("last Monday")), "\n";
使用哪些工具进行版本控制
svn,git,cvs
实现字符串翻转
$str = "wwweeerr"; $len = strlen($str); $rev_str = ‘‘; for ($i = $len; $i >= 0; $i--) { $rev_str .= $str[$i]; } echo strrev($str), "<br>"; echo $rev_str; $str_c = "你好"; $len_c = mb_strlen($str_c,‘GB2312‘); $rev_c = ‘‘; for ($i = $len_c; $i >= 0; $i--) { $rev_c .= mb_substr($str_c,$i,1,"GB2312")
); } echo $rev_c;
设置session得生存周期 :session_set_cookie_params
require require_once include ,include_once 区别
include产生一个warning,而require产生直接产生错误中断
require 、include在运行前载入
require_once 、include_once 如果文件被包含,那么就不会包含文件
效率方面
include_once(),require_once(),与include(),require()比较,效率要低一些,因为他们至少得先判断一下这个文件是否已包含。这一问题在PHP5版本有很大改进,不过效率还是有差别。
require和include之间有两点重要的区别。首先,无论require的位置如何,制定文件都将包含到出现require的脚本中。例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。而include可以放在条件语句中。
在PHP中,heredoc是一种特殊的字符串,它的结束标志必须与开始得标志相同
$dd = <<<dd dd;
MVC认识
M:model(模型),与数据打交道(数据库)
V:view(视图) 展示数据
C:controller(控制器) 处理业务逻辑,即是传输数据
PHP中传值与传引用的区别。什么时候传值,什么时候传引用
引用传值 : 用&,在函数范围改变引用传值的值,会引起外面值得改变
传值:相当于复制,在函数范围内对传值的改变,不会引起外面值得变化
优缺点: 如果是大型的字符串和对象进行传值,会消耗很多内存,影响性能,因此此操作慎重;如果是引用传值,则是传递一个地址,对性能没有影响。
在PHP中error_reporting这个函数有什么作用:报告错误级别。
邮箱正则匹配:/([a-z\d]+[\._-])@([\a-Z\.\d_-]+)\.([a-z]+)
如何得到当前执行脚本路径,包括所得到参数:
__FILE__ 获取路径
$argc --获取参数数量
$argv --获取参数列表
foo()和@foo()之间有什么区别: @代表忽略warning
PHP中权限控制修饰符:public private protected
取得查询结果集总数的函数是:mysql_num_row()
$arr = array(‘james‘, ‘tom‘, ‘symfony‘); 请打印出第一个元素的值
$arr = array(‘james‘, ‘tom‘, ‘symfony‘); print_r($arr[0]);
//并不移动指针。 print_r(current($arr)); ///会移动指针 print_r(array_shift($arr));
写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
$url = "http://www.sina.com.cn/abc/de/fg.php?id=1"; $pathinfo = pathinfo($url); var_dump($pathinfo); $url_array = explode(‘?‘,$pathinfo[‘extension‘]); echo $url_array[0]."<br>"; //php $parse_url =parse_url($url); echo substr(basename($parse_url[‘path‘]), strrpos(basename($parse_url[‘path‘]), ‘.‘));//.php //正则匹配 \w 是[0-9a-zA-Z_] 包含字母、数字和下划线 $result = preg_match("/[\w-]+(.php)[\w-=?]+/",$url,$matched); echo $matched[1]; //也可以直接匹配 $result_again = preg_match("/[\w\/-]+(.php)[\w\/-=?]+/",$url,$matched); echo $matched[1];
计算相对路劲
//计算相对路劲 b线对于a $a = ‘/a/b/c/q/d/e.php‘; $b = ‘/a/b/12/34/c.php‘; $array_a = explode(‘/‘, $a); $array_b = explode(‘/‘, $b); $len_b = count($array_b); for ($i = 0; $i < $len_b; $i++) { if($array_b[$i] !=$array_a[$i]){ $dismatchlen = count($array_a)-$i; $rel_path = array_slice($array_b,$i); break; } } $relative_path = str_repeat(‘../‘,$dismatchlen).implode(‘/‘,$rel_path); echo $relative_path;
遍历一个文件夹下的所有文件和子文件夹。
//遍历一个文件夹下的所有文件和子文件夹 $path = dirname(__FILE__); function each_dir($path) { //在遍历之前最好做安全检查 if (is_dir($path)) { //打开目录句柄 $re = opendir($path); //从目录句柄中读取条目 while (($file = readdir($re)) !== false) { if ($file == ‘.‘ || $file == "..") { echo $file . "<br/>"; //进行下一次循环 continue; } $r_path = $path . ‘/‘ . $file; //如果是文件输出 if (is_file($r_path)) { echo $r_path . "<br/>"; continue; } //递归调用 if (is_dir($r_path)) { each_file($r_path); } } //关闭资源 closedir($re); } } each_dir($path);
PHP面试题