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-zd]+[._-])@([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);
0 条评论
发表一条评论