首页 > 代码库 > PHP 面试题

PHP 面试题

请写出以下html标签的含义:

input

form

script

style

table

b

img

============================================================

<input/>标签
用于搜集用户信息。
根据不同的type属性值,输入字段拥有很多种形式。
输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。

============================================================

<form>标签
用于为用户输入创建HTML表单。表单能够包含input元素,
比如文本字段、复选框、单选框、提交按钮等等。

============================================================

<script>标签
用于定义客户端脚本,
比如JavaScript。
script元素既可以包含脚本语句,也可以通过src属性指向外部脚本文件。
<style>标签
用于为HTML文档定义样式信息。
<table>标签
定义HTML表格。简单的HTML表格由table元素以及一个或多个tr、th或td元素组成。
<b>
呈现粗体文本效果。
<img/>
元素向网页中嵌入一幅图像。

14.用css、html编写一个两列布局的网页,右侧固定宽度200px,左侧自适应

html页面

<head>
<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/theme.css" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<div id="wrap">
    <div id="content" style="height:240px;">
    <div id="contentb">content自适应区</div>
    </div>
    <div id="sidebar" style="height:240px;">sidebar固定宽度区</div>
</div>
<div id="footer">底部</div>

css页面

#wrap {*zoom:1;position: relative;}
#sidebar {width: 200px;float:right;border:1px solid #CCC;}
#content {margin-left:-210px;float:left;width:100%;}
#contentb {margin-left:210px;border: 1px solid #CCC;height:240px;}
#footer {border:1px solid #CCC;margin-top:10px;clear:both;}

JavaScript部分
1.JS表单弹出对话框函数是?获得输入焦点函数是?

弹出对话框函数:
alert(),
prompt(),
confirm()
获得输入焦点函数:
focus()

2.JS的转向函数是?怎么引入一个外部JS文件?

转向使用
window.location.href=""
引入外部js使用
<script src=""/>

3.解释下面语句的意思:document.form["formName"].submit

获取name为formName的表单并将该表单数据提交到服务器。但这行代码是不能运行的,有两处错误,
一是通过表单名称来获取表单得到时候,应该写成document.forms[‘formName’],
二是提交表单事件使用submit方法
例如:document.forms[‘login‘].submit()

4.有下面语句:<input id="txt" type="text" value="http://www.mamicode.com/baidu"/>编写代码,

当鼠标划过文本框,自动选中文本框中的内容。

<script>
function mOver(n)
{
     obj =document.getElementById(n);
      //obj.focus();
      obj.select();
}
</script>

<input onmouseover="mOver(this.id)" id="txt" type="text" value="http://www.mamicode.com/baidu"/>

5.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。

主窗口

<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<a href="" id="a1" target="new">新窗口</a>
<div id="msg"></div>
<script type="text/javascript">
    var a1 = document.getElementById(‘a1‘);
    a1.onclick = function(){
        window.open("result.php","new","location=no,toolbar=no");
        return false;
        }
</script>

弹出全屏窗口

opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。

<!DOCTYPE html>
<html lang="zh-cn">
  <head>
   <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  </head>
  <body>
    <h1>你好,世界!</h1>
    <input type="text" name = "message" id="m1"><br/>
    <input type="button" value="http://www.mamicode.com/关闭" id="btn"/>
    <script type="text/javascript"> 
        var btn = document.getElementById("btn");
        var message = document.getElementById("m1");
        btn.onclick=function(){
            var div =window.opener.document.getElementById("msg");
            div.innerHTML=message.value;
            window.close();
        }
    </script>
  </body>
</html>

8.用JavaScript写一个函数,其功能是可以删除数组中重复的元素。

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

slice() 方法可从已有的数组中返回选定的元素。

<script type="text/javascript">
function unique(arr){
    var result= arr;
    for(var i=0;i<arr.length;i++){
            for(var j=0;j<arr.length;j++){
                temp =arr[i];
                if((i+j+1)<arr.length && temp === arr[i+j+1] ){
                        result.splice(i+j+1,1);
                    }
                }
        }
    return result;
} 
var a = [2,4,3,8,5,33,8,4,false,‘‘,{}];
var b = unique(a);
alert(b);
</script>


12.如何添加html元素的事件,有几种方法,举例

(1).直接作为元素的属性,如<img onclick="alert(‘hello‘);"src="http://www.mamicode.com/hello.jpg">
(2).使用DOM 0级事件,简单,兼容性好,如img.onclick=function(){}
(3).使用DOM 2级事件,功能更强大,在非IE等标准浏览其中,
    使用addEventListener,在IE浏览器中则使用attachEvent来实现。

13.JavaScript能否定义二维数组,如果不能你如何解决?

JavaScript不支持二维数组定义,可以用arr[0]=newarray()来解决。

14.假设a.html和b.html在同一个文件夹下面,用JavaScript实现当打开a.html

五秒钟后,自动跳转到b.html。

<script type="text/javascript">
function gotoB(){
    window.location.href="http://www.baidu.com";
    window.close();    
}
setTimeout("gotoB()",5000);//设置5秒跳转
</script>

15.请使用JavaScript写出三种产生一个image标签的方法(提示:从方法、对象、HTML角度考虑)

(1).var img=new Image();
(2).var img=document.createElement("image")
(3).img.innerHTML="<img src=http://www.mamicode.com/‘xxx.jpg‘/>"

16.js中网页前进和后退的代码

前进:history.forward();或者history.go(1);
后退:history.back();或者history.go(-1);

17.请写出一条至少3个节点的DOM树

<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<script type="text/javascript">
var div = document.createElement("div");
var a = document.createElement("a");
a.href="http://www.baidu.com";
var span=document.createElement("span");
span.innerHTML="百度";
a.appendChild(span);
div.appendChild(a);
document.body.appendChild(div);
</script>
</body>

18.实现点击按钮弹出窗口的代码

<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<input type="button" id="btn" value="http://www.mamicode.com/点击这里" />
<script type="text/javascript">
document.getElementById("btn").onclick=function (){
    window.open("http://www.baidu.com");
    //document.write("ok");
};
</script>
</body>

19.JavaScript包括那些基本数据类型?

JavaScript中包括5种基本数据类型,分别是Number,String,Boolean,Null和Undefined。

PHP语言基础

1.strlen()与mb_strlen()的作用分别是什么

strlen和mb_strlen都是用于获取字符串长度的,

其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,

如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符的个数,而是该字符的总字节数,

可以使用mb_strlen获取其字符个数,

使用mb_strlen要注意两点,

一是要开启mbstring扩展,

二是要指定字符集。

相关题目1:实现中文字串截取无乱码的方法。

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
$str = ‘i love u‘;
echo strlen($str);//8
$str1 = "津沙港湾";
echo strlen($str1);//12
echo mb_strlen($str1);//12
echo mb_strlen($str1,‘utf-8‘);//4
//直接使用内置php函数mb_substr()
echo mb_substr($str1, 1,2,‘utf-8‘);
//自定义函数截取中文字符
function substr_utf8($str,$start,$length=null){
    return implode("", array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length));
}
echo substr_utf8($str1, 1);
?>

如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”

//方法一,使用php内置函数,确保配置中已打开mbstring扩展
<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
$str1 = "中国2北333京";
echo mb_strlen($str1,‘utf-8‘);
echo mb_substr($str1, 3,1,‘utf-8‘);
?>

4.写出下列几个预定义全局变量的作用

$_SERVER[‘DOCUMENT_ROOT‘]//当前运行脚本所在的文档根目录
$_SERVER[‘HTTP_HOST‘]//当前请求的Host:头部的内容
$_SERVER[‘REMOTE_ADDR‘]//正在浏览当前页面用户的IP地址
$_SERVER[‘HTTP_REFERER‘]//链接到当前页面的前一页面的URL地址
$_SERVER[‘SERVER_NAME‘]//当前运行脚本所在服务器主机的名称
$_FILES//包含有所有上传的文件信息
S_FILES[‘userfile‘][‘name‘]//客户端机器文件的原名称
$_FILES[‘userfile‘][‘type‘]//文件MIME类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES[‘userfile‘][‘size‘]//已上传文件的大小,单位为字节
$_FILES[‘userfile‘][‘tmp_name‘]//文件被上传后在服务端储存的临时文件名
$_FILES[‘userfile‘][‘error‘]//和该文件上传相关的错误代码

5.include和require都能把另外一个文件包含到当前文件中,他们有什么区别?

  include和include_once又有什么区别?

二者区别只有一个,那就是对包含文件的需求程度,
include就是包含,
如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。
require意思是需要,
如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
在如何处理失败时,
include()产生一个警告
require()则导致一个致命错误
once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。

6.用最少的代码写一个求3值最大值的函数

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
function maxt($a,$b,$c){
    //return $a>$b?($a>$c?$a:$c):($b>$c?$b:$c);
      return ($a>$b?$a:$b)>$c?($a>$b?$a:$b):$c;
}
echo maxt(3,-2,122);
?>

7.简述POST和GET传输的最大容量分别是多少?

POST根据你php.ini文件配置(默认是8M)
GET的话大小限制在2KB

表单中get与post提交方法的区别?

get是发送请求HTTP协议通过url参数传递进行接收,
post是实体数据,可以通过表单提交大量信息。

9.echo(),print(),print_r() printf()的区别?

echo
是一个语言结构,输出一个或多个字符串;
print()
实际上不是一个函数(它是一个语言结构),
因此你可以不必使用圆括号来括起它的参数列表,它输出一个字符串;
print_r()
是一个函数,打印变量的信息,基本类型,数组,对象。
printf — 输出格式化字符串

在实际使用中, print 和 echo 两者的功能几乎是完全一样。
可以这么说,凡是有一个可以使用的地方,另一个也可以使用。
但是,两者之间也还是一个非常重要的区别:
在 echo 函数中,可以同时输出多个字符串,
而在 print 函数中则只可以同时输出一个字符串。
同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。

echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:
(1) echo可以输出多个字符串,像下面这样:
echo ‘a‘,‘b‘,‘c‘;
如果你非要加上圆括号,
注意写成  echo (‘a‘,‘b‘,‘c‘);是错误的,
应该写成:echo (‘a‘),(‘b‘),(‘c‘);
它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
$ret = print ‘Hello World‘;
所有它能用在更复杂的表达式中。

另外,echo的效率相对比较快~

如下代码:

<?php
$a=‘hello ‘;
$b=‘php world!‘;
echo $a,$b.‘<br />‘;
//echo 可以用逗号分隔字符串变量来显示print $a.$b.‘<br />‘;
//而print不能使用逗号,只能用点号分隔,print $a,$b.‘<br />‘;//使用逗号时报错。
?>

echo    命令和    print    命令    相同,没有区别  
echo    函数    和    print    函数    有区别。  
echo()    无返回值,与echo    命令相同  
print()    有返回值,成功,返1,false,返0.    

printf()    和    sprintf()    类似,
均为格式化输出,不同的是
前者输出到标准输出,
后者输出到变量

echo与print在使用逗号和点号区别

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
$a = 9;
$b = 10;
echo $a.$b;
echo $a,$b;
print $a.$b;
//print $a,$b;//这个逗号不行,会报错

10.用PHP打印出前一天的时间格式是2006-5-10 22:21:21

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
echo date(‘Y-m-d H:i:s‘,time()-3600*24);//方法一
echo ‘<br/>‘;
echo date(‘Y-m-d H:i:s‘,strtotime(‘-1 day‘));//方法二

求两个日期的差数,例如2009-3-1~2009-4-4的日期差数

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
echo (strtotime("2009-4-4")-strtotime("2009-3-1"))/(3600*24);

11.不使用第三个变量交换两个变量的值

  1. substr()方法

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符串类型
$a = ‘abc‘;
$b = ‘efg‘;
$a .=$b;
//substr()方法
$b = substr($a, 0,(strlen($a)-strlen($b)));
$a = substr($a,Strlen($b));
echo $a;
echo ‘<br/>‘;
echo $b;

2.str_replace()方法

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符串类型
$a = ‘abc‘;
$b = ‘efg‘;
$a .=$b;
//str_replace()方法
$b = str_replace($b, "", $a);
$a = str_replace($b, "", $a);
echo $a;
echo ‘<br/>‘;
echo $b;

3.list()和array()方法

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符串类型
$a = ‘abc‘;
$b = ‘efg‘;
//list()和array()方法
list($b,$a)=array($a,$b);
echo $a;
echo ‘<br/>‘;
echo $b;

4.字符串和数字都适用 使用异或运算

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符串和数字都适用
$a = ‘abc‘;
$b = ‘efg‘;
//异或方法
$a = $a ^ $b;
$b = $a ^ $b;
$a = $a ^ $b;
echo $a;
echo ‘<br/>‘;
echo $b;

5.只适用于数字

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是数字类型
$a = 5;
$b = 6;
$a = $a +$b;
$b = $a - $b;
$a = $a - $b;
echo $a;
echo ‘<br/>‘;
echo $b;

6.利用explode()方法

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符和数字类型
$a = ‘津沙港湾2016‘;
$b = ‘崎沙火山岛0915‘;
$a = base64_encode($a);
$b = base64_encode($b);
$a = $a.‘&‘.$b;
$b = explode(‘&‘, $a);
$a = base64_decode($b[1]);
$b = base64_decode($b[0]);
echo $a;
echo ‘<br/>‘;
echo $b;

12.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?

变量默认总是传值赋值。
那也就是说,
当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。
这意味着,
例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP也提供了另外一种方式给变量赋值:引用赋值。
这意味着新的变量简单的引用(换言之,“成为其别名”或者“指向”)了原始变量。
改动新的变量将影响到原始变量,反之亦然。
使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。
对象默认是传引用。
对于较大的数据,传引用比较好,这样可以节省内存的开销。

13.将1234567890转换成1,234,567,890每3位用逗号隔开的形式。

方法一用php内置函数

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
$a = ‘1234567890‘;
echo number_format($a);

方法二自定义函数

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符和数字类型
$a = ‘1234567890‘;
function nformat($str){
    $n = ‘‘; //临时变量
    $m = strlen($str); //获取字符串长度
    $k = $m % 3;
  // echo $k."<br/>";
    for($i=0;$i < $m; $i++){ // 如果10位数出现取余1,4,7 位置需要加逗号
        if($i%3==$k &&$i!=0){
            $n .= ",";
        }
        $n .= $str{$i};
    }
    return $n;
}
echo  nformat($a);

方法三chunk_split()方法 这个方法处理不了中文字符串

<?php 
header(‘Content-Type:text/html;charset=utf-8‘);
//变量是字符和数字类型
$a = ‘1234567890ssvm‘;
function nformat($str){
    $str = strrev($str);
    $str = chunk_split($str,3,‘,‘);
    echo $str.‘<br/>‘;
    $str = strrev($str);
    $str = ltrim($str,‘,‘);
    return $str;
}
echo  nformat($a);

方法四转成数组 使用中文字符串

<?php
header("content-type:text/html;charset=utf-8");
 /**
此函数的作用是适用中文字符串加千分号
 */
function nformat($str){
    //判断输入的是不是utf8类型的字符,否则退出
    if(!is_string($str)||!mb_check_encoding($str,‘UTF-8‘)){
        exit("输入类型不是UTF8类型的字符串");
    }
    $array=array();
    //将字符串存入数组
    $l=mb_strlen($str,‘UTF-8‘);
    for($i=0;$i<$l;$i++){
        $array[]=mb_substr($str,$i,1,‘UTF-8‘);
    }
    $n = ‘‘; //临时变量
    $m = count($array); //获取数组长度
    $k = $m % 3;
    for($i=0;$i < $m; $i++){ // 如果10位数出现取余1,4,7 位置需要加逗号
        if($i%3==$k &&$i!=0){
            $n[]= ",";
            $n[]=$array[$i];
            continue;
        }
        $n[]=$array[$i];
    }
    $string = implode($n);
    return $string;
}
$str = "1234adfadaf中华人民共和国";
echo nformat($str);

翻转中文字符串

<?php
header("content-type:text/html;charset=utf-8");
 /**
此函数的作用是反转中文字符串
mb_strlen() 获取字符的长度
mb_substr() 获取字符的单个元素
krsort() 按照键值逆序排序数组
implode() 将数组拼接为字符串
explode() 使用字符串分隔字符串
 */
function str_rev_gb($str){
    //判断输入的是不是utf8类型的字符,否则退出
    if(!is_string($str)||!mb_check_encoding($str,‘UTF-8‘)){
        exit("输入类型不是UTF8类型的字符串");
    }
    $array=array();
    //将字符串存入数组
    $l=mb_strlen($str,‘UTF-8‘);
    for($i=0;$i<$l;$i++){
        $array[]=mb_substr($str,$i,1,‘UTF-8‘);
    }
    //反转字符串
    $a=krsort($array);
    //拼接字符串
    $string=implode($array);
    return $string;
}
$str1 = "Englist";
$str2 = "English中国";
$str3 = "Eng中lish国";
$str4 = "中华人民共和国";
echo $str1."->".str_rev_gb($str1)."<br>";
echo $str2."->".str_rev_gb($str2)."<br>";
echo $str3."->".str_rev_gb($str3)."<br>";
echo $str4."->".str_rev_gb($str4)."<br>";

14.用PHP写出显示客户端IP与服务器IP的代码。

客户端IP:$_SERVER["REMOTE_ADDR"]
服务器端IP:$_SERVER["SERVER_ADDR"]

15.简述如何得到当前执行脚本路径,包括所得到参数。

获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__
获取参数,使用$_SERVER["QUERY_STRING"]

16.What is the difference between foo() & @foo()?

foo()
会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
@foo()
在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程序都使用@mysql_connect()和@mysql_query来隐藏mysql的错误信息,
这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。

18.检测一个变量是否有设置的函数是否?是否为空的函数是?

isset
检测一个变量是否设置
empty
检测是否为空
注意二者的区别,
如果变量是非空或非零的值,则empty()返回FALSE。
换句话说,
""、0、"0"、NULL、FALSE、array()以及没有任何属性的对象都将被认为是空的。

null $var未定义
对于isset为false 
对于empty为true

19.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量______中;而链接到当前页面的的前一页面URL记录在预定义变量______中。

当前脚本名称:$_SERVER["PHP_SELF"]或者$_SERVER["SCRIPT_NAME"];
链接到当前页面的前一页面的URL地址:$_SERVER["HTTP_REFERER"]。

20.sort()、asort()、和ksort()有什么分别?它们分别在什么情况下使用?

1 sort($arr);       //由小到大,忽略键名       
2 rsort($arr);      //由大到小,忽略键名
3 asort($arr);     //由小到大,保留键名       
4 arsort($arr);    // 由大到小,保留键名
5 ksort($arr);     //按照键名正序排序           
6 krsort($arr);   // 按照键名逆序排序

sort — 对数组排序
根据数组中元素的值,以英文字母顺序排序,索引键会由0到n-1重新编号。
主要是当数组索引键的值无关紧要时用来把数组排序。

rsort — 对数组逆向排序
rsort函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

asort — 对数组进行排序并保持索引关系
asort函数对数组进行排序,数组的索引保持和单元的关联。

arsort — 对数组进行逆向排序并保持索引关系 
arsort函数对数组进行排序,数组的索引保持和单元的关联。

ksort — 对数组按照键名排序
对数组按照键名排序,保留键名到数据的关联

krsort — 对数组按照键名逆向排序
对数组按照键名逆向排序,保留键名到数据的关联。

21.在PHP中error_reporting这个函数有什么作用?

打开或者关闭错误报告,
如:
error_reporting(0);// 关闭所有PHP错误报告
error_reporting(E_ALL&~E_NOTICE);
error_reporting(E_ALL);

error_reporting(2047)什么作用?

2047=1+2+4+8+16+32+64+128+256+512+1024
其中,
1对应E_ERROR,
2对应E_WARNING,
4对应E_PARSE,
8对应E_NOTICE,
16对应E_CORE_ERROR,
32对应E_CORE_WARNING,
64对应E_COMPILE_ERROR,
128对应E_COMPILE_WARNING,
256对应E_USER_ERROR,
512对应E_USER_WARNING,
1024对应E_USER_NOTICE。
error_reporting(2047)意味着上述错误都会显示出来。

23.常量如何定义?如何检测一个常量是否被定义?

定义常量:define(), const
检测常量是否定义:defined(),
如
define("TEST","happynewyear!");
if(defined("TEST")){
echoTEST;
}
const YHY = ‘yangyihai‘;

24.执行程序段<?php echo 8%(-2) ?>将输出

%为取模运算,输出0
$a%$b其结果的正负取决于$a的符号。
echo((-8)%3)."<br/>";//输出-2
echo(8%(-3))."<br/>";//输出2

25.数组函数arsort的作用是____;语句error_reporting(2047)的作用是____。

arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的作用reportAllerrorsandwarnings,见21题中相关题目。

26.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHPHP
P模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。

LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php.php

27.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.

allow_call_time_pass_reference:是否启用在函数调用时强制参数被按照引用传递,默认关闭

28.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____

顶格写,并且不能包含任何其它字符除";"
如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW; 

heredoc
echo <<<EOT
   <html>
   <head><title>主页</title></head>
   <body>主页内容</body>
   </html>
EOT;

nowdoc
$str = <<<‘EOD‘
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;

nowdoc结构,其用法和heredoc相同,
不同的是Nowdoc 结构是类似于单引号字符串的。
nowdoc 中不进行解析操作。
这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。

29.echo count("abc");输出什么?

输出 1
count:计算数组中的单元数目或对象中的属性个数,通常是一个array,
任何其它类型都只有一个单元。
对于对象,如果安装了SPL,可以通过实现Countable接口来调用count()。
该接口只有一个方法count(),此方法返回count()函数的返回值。
如果var不是数组类型或者实现了Countable接口的对象,将返回1,
有一个例外,如果var是NULL则结果是0。

What will be the output of the following PHP code:

<?php
echo count(strlen("
 ?>
answer:1

30.写个函数用来对二维数组排序

<?php
header("content-type:text/html;charset=utf-8");
function array_sort($arr,$row,$type=‘asc‘){
    $arr_temp = array();
    //将排序依据列作为数组的键名
    foreach($arr as $value){
        $arr_temp[$value[$row]] = $value;
    }
    //按照键名对数组排序,保持索引关系
    if($type == ‘asc‘){
        ksort($arr_temp);
    }elseif($type == ‘desc‘){
        krsort($arr_temp);
    }
    return $arr_temp;
}

$person = array(
    array(‘id‘=>2,‘name‘=>‘yang‘,‘age‘=>20),
    array(‘id‘=>43,‘name‘=>‘wang‘,‘age‘=>30),
    array(‘id‘=>22,‘name‘=>‘lang‘,‘age‘=>60)
);
$person = array_sort($person, ‘name‘);
var_dump($person);

输出结果

array (size=3)
  ‘lang‘ => 
    array (size=3)
      ‘id‘ => int 22
      ‘name‘ => string ‘lang‘ (length=4)
      ‘age‘ => int 60
  ‘wang‘ => 
    array (size=3)
      ‘id‘ => int 43
      ‘name‘ => string ‘wang‘ (length=4)
      ‘age‘ => int 30
  ‘yang‘ => 
    array (size=3)
      ‘id‘ => int 2
      ‘name‘ => string ‘yang‘ (length=4)
      ‘age‘ => int 20

31.写5个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装php库中已有的函数。

<?php
header("content-type:text/html;charset=utf-8");
//echo __FILE__;
$path = str_replace(‘\\‘, ‘/‘, __FILE__);

function ext_one($path){
    return substr(strrchr($path, ‘.‘),1);
}
echo ext_one($path);

function ext_two($path){
    return substr($path,strrpos($path, ‘.‘)+1);
}
echo ext_two($path);

function ext_three($path){
    $path_parts = pathinfo($path);
    return  $path_parts[‘extension‘];
}
echo ext_three($path);

function ext_four($path){
    $arr = explode(‘.‘,$path);
    return $arr[count($arr)-1];
}
echo ext_four($path);

function  ext_five($path){
    $pattern = ‘/^[^\.]+\.([\w]+)$/‘;
    return preg_replace($pattern, ‘${1}‘, basename($path));
}
echo ext_five($path);

32.PHP的意思,它能干些什么?

PHP(HypertextPreprocessor,超文本预处理器的字母缩写)
是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到HTML中,尤其适合web开发。
PHP能做任何事。
PHP主要是用于服务端的脚本程序,
因此可以用PHP来完成任何其它的CGI程序能够完成的工作,
例如收集表单数据,生成动态网页,或者发送/接收Cookies。但PHP的功能远不局限于此。
PHP脚本主要用于以下三个领域:
1)服务端脚本。这是PHP最传统,也是最主要的目标领域。
2)命令行脚本。可以编写一段PHP脚本,并且不需要任何服务器或者浏览器来运行它。
通过这种方式,仅仅只需要PHP解析器来执行。
3)编写桌面应用程序。

Name a few ways to output (print) a block of HTML code in PHP?

你可以使用PHP中任何一种输出语句,包括echo、print、printf,
大部分人都使用如下例的echo:
echo "My string $variable";你也可以使用这种方法:
echo <<<END
This text is written to the screen as output and this $variable is parsed too.
If you wanted you can have <span> HTML tags in here as well.</span>The END;remarks must 
be on a line of its own,and can‘t contain any extra white space.
END;

35.$arr=array(‘james‘,‘tom‘,‘symfony‘);

请打印出第一个元素的值,并请将数组的值用‘,‘号分隔并合并成字串输出。

<?php
header("content-type:text/html;charset=utf-8");
$arr=array(‘james‘,‘tom‘,‘symfony‘);
echo $arr[0];
$str = implode(‘,‘, $arr);
echo $str;

36.$a=‘abcdef‘;请取出$a的值并打印出第一个字母

<?php
header("content-type:text/html;charset=utf-8");
$a=‘abcdef‘;
echo $a;
echo ‘<br/>‘;
echo $a{0};
echo ‘<br/>‘;
echo $a[0];

37.What does===do?What‘s an example of something that will give true for ‘==‘,but not‘===‘?

===表示全等,是指的两个变量的值和类型都相等。
如if(strpos(‘abc‘,‘a‘)==false)和if(strpos(‘abc‘,‘a‘)===false)
<?php
header("content-type:text/html;charset=utf-8");
$text=‘Content-Type:text/xml‘;
print substr($text,strpos($text,‘:‘)+1);
print substr(strstr($text,‘:‘),1);
print substr(strchr($text,‘:‘),1);

46.将字符09转换成十进制数字。

使用intval函数,echo intval("09"),
使用int强制类型转换。(float)‘09‘

47.请写一个函数,实现以下功能:字符串"open_door"转换成"OpenDoor"、"make_by_id"转换成"MakeById"。

<?php
header("content-type:text/html;charset=utf-8");
function changeStr($str){
    $str = explode(‘_‘,$str);
   $str = array_map(‘ucfirst‘, $str);
    return implode($str);    
}
$str = ‘make_by_id‘;
echo changeStr($str);

48.要求写一段程序,实现以下数组$arr1转换成数组$arr2:

$arr1

$arr1 = array(
    ‘0‘ => array(‘fid‘ =>1, ‘tid‘ => 1, ‘name‘ => ‘Name1‘),
    ‘1‘ => array(‘fid‘ =>1, ‘tid‘ => 2, ‘name‘ => ‘Name2‘),
    ‘2‘ => array(‘fid‘ =>1, ‘tid‘ => 5, ‘name‘ => ‘Name3‘),
    ‘3‘ => array(‘fid‘ =>1, ‘tid‘ => 7, ‘name‘ => ‘Name4‘),
    ‘4‘ => array(‘fid‘ =>3, ‘tid‘ => 9, ‘name‘ => ‘Name5‘)
);

$arr2

$arr2 = array(
    ‘0‘ => array(
        ‘0‘ => array(‘tid‘ =>1,‘name‘=>‘Name1‘),
        ‘1‘ => array(‘tid‘ =>2,‘name‘=>‘Name2‘),
        ‘2‘ => array(‘tid‘ =>5,‘name‘=>‘Name3‘),
        ‘3‘ => array(‘tid‘ =>7,‘name‘=>‘Name4‘),
    ),
    ‘1‘ => array(
        ‘0‘ => array(‘tid‘ =>9,‘name‘=>‘Name5‘),
    )
);

实现函数

<?php
header("content-type:text/html;charset=utf-8");
$arr1 = array(
    ‘0‘ => array(‘fid‘ =>1, ‘tid‘ => 1, ‘name‘ => ‘Name1‘),
    ‘1‘ => array(‘fid‘ =>1, ‘tid‘ => 2, ‘name‘ => ‘Name2‘),
    ‘2‘ => array(‘fid‘ =>1, ‘tid‘ => 5, ‘name‘ => ‘Name3‘),
    ‘3‘ => array(‘fid‘ =>1, ‘tid‘ => 7, ‘name‘ => ‘Name4‘),
    ‘4‘ => array(‘fid‘ =>3, ‘tid‘ => 9, ‘name‘ => ‘Name5‘)
);

function changStr($arr){
    foreach($arr as $val){    
        $tmp = $val;
        array_shift($val);
        $result[$tmp[‘fid‘]][]=$val;           
        }
      return array_values($result);
}
$arr3 = changStr($arr1);
var_dump($arr3);

输出界面

array (size=2)
  0 => 
    array (size=4)
      0 => 
        array (size=2)
          ‘tid‘ => int 1
          ‘name‘ => string ‘Name1‘ (length=5)
      1 => 
        array (size=2)
          ‘tid‘ => int 2
          ‘name‘ => string ‘Name2‘ (length=5)
      2 => 
        array (size=2)
          ‘tid‘ => int 5
          ‘name‘ => string ‘Name3‘ (length=5)
      3 => 
        array (size=2)
          ‘tid‘ => int 7
          ‘name‘ => string ‘Name4‘ (length=5)
  1 => 
    array (size=1)
      0 => 
        array (size=2)
          ‘tid‘ => int 9
          ‘name‘ => string ‘Name5‘ (length=5)

50.$val=max(‘string‘,array(2,5,7),42);$val值为

array(2,5,7)
<?php
echo max(1, 3, 5, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5

// When ‘hello‘ is cast as integer it will be 0. Both the parameters are equally
// long, so the order they are given in determines the result
echo max(0, ‘hello‘);     // 0
echo max(‘hello‘, 0);     // hello

echo max(‘42‘, 3); // ‘42‘

// Here 0 > -1, so ‘hello‘ is the return value.
echo max(-1, ‘hello‘);    // hello

// With multiple arrays of different lengths, max returns the longest
$val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)

// 对多个数组,max 从左向右比较。
   // 因此在本例中:2 == 2,但 4 < 5
$val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)

// 如果同时给出数组和非数组作为参数,则总是将数组视为
   // 最大值返回
$val = max(‘string‘, array(2, 5, 7), 42);   // array(2, 5, 7)

51.定义常量MYPI=3.14_________________________;

define("MYPI",3.14);

52.简述单引号和双引号的用法

双引号串中的内容可以被解释而且替换,
单引号串中的内容总被认为是普通字符。

53.Switch完整语法和注意事项

使用Switch语句可以避免冗长的if..elseif..else代码块,
case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case后用‘‘,
注意break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。

54.用PHP编写代码在页面输出当前的北京时间,格式为“2007-01-18 09:22:03”

date_default_timezone_set(‘PRC‘);
echo date("Y-m-d H:i:s",time());

55.简述GBK、GB2312、BIG5、GB18030

GB2312
支持的汉字较少,
GBK
是相比GB2312汉字更为丰富,包括全部中日韩汉字,
GB18030
相比GBK增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,
一般简体中文使用GBK而繁体中文使用BIG5。

56.计算某段字符串中某个字符出现的次数(例如:gdfgfdgd59gmkblg中g的次数)

$text=‘gdfgfdgd59gmkblg‘;
echo substr_count($text,‘g‘);

57.以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)

print_r$val=333;//error,print_r是一个函数,需加上括号,如果是print则可以

print_r($val=333);//正确$a+=($b=4)+5;//notice,$a未定义,但可以正确运行

$foo[bar]=‘enemy‘;//notice,最好bar加上引号

functionx($a="1",$b){}//无,但给参数默认值应尽量从右向左

59.写出如下程序的输出结果

<?php
header("content-type:text/html;charset=utf-8");
$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = ‘‘;
$a5 = ‘0‘;
$a6 = ‘null‘;//false 这个变量不为空 是一个字符串null
$a7 = array();
$a8 = array(array());//false 数组不为空 二位数组
echo empty($a1) ? ‘true‘ : ‘false‘;
echo empty($a2) ? ‘true‘ : ‘false‘;
echo empty($a3) ? ‘true‘ : ‘false‘;
echo empty($a4) ? ‘true‘ : ‘false‘;
echo empty($a5) ? ‘true‘ : ‘false‘;
echo empty($a6) ? ‘true‘ : ‘false‘;
echo empty($a7) ? ‘true‘ : ‘false‘;
echo empty($a8) ? ‘true‘ : ‘false‘;

结果为

true true true true true false true false

64.$arr=array(‘james‘,‘tom‘,‘symfony‘);

请将’jackjack’’添加到$arr数组的开头,并把jack打印出来。

array_unshift($arr,’jack’);
echo $arr[0];

65.$arr=array(‘james‘,‘tom‘,‘symfony‘);请将$arr数组的值用’,’分割并合并成字符串输出?

$arr = explode(‘,‘,$arr);
echo implode($arr);

67.$arr=array(3,7,2,1,‘d‘,‘abc‘);

请将$arr按照从大到小的顺序排序,并保持其键值不变?

<?php
header("content-type:text/html;charset=utf-8");
$arr=array(3,7,2,1,‘d‘,‘abc‘);
arsort($arr);
var_dump($arr);

68.$mail=“gaofei@163.com";

请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?

echo strstr($mail,‘163‘);
echo substr($mail,7);
echo substr($mail,strpos($mail,‘@‘)+1);
$arr=explode("@",$mail);
echo $arr[1];

69.PHP中的注释的写法,要列出三种?

//
注释内容C风格的单行注释

#
注释内容unix风格的单行注释

/*注释内容*/
C风格的多行注释

70.如何在一个php函数中使用具有全局属性的变量,说出两种方式?

global $a

$GLOBALS[‘a‘]

71.若$aa=‘aa‘;则print(‘aa is \‘aa\‘‘."<br/>")会输出什么?

aa is ‘aa‘

72.如何把$a=‘123’转化成123,列出两种方式?

$a = ‘123‘;
$a = (int)$a;
$a = intval($a);
settype($a,‘int‘);

1)强制类型转换:(整型)字符串变量名;
2)intval(字符串变量);
3)直接转换:settype(字符串变量,整型);

73.说说break和continue可以用在哪些语句里,并且列出二者的区别?

break和continue可以用在switch语句中,或是循环结构中
它们的区别主要是体现在循环语句中,
break表示跳出整个循环,不再执行,循环将终止,
continue则表示跳出本次循环,继续下一次的循环,不会终止循环。

74.函数中的默认参数位置如何放置?

当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;
否则,函数将不会按照预期的情况工作。

75.如何往一个数组后面添加一个值?列出两种方式?

$arr[]=$value;
array_push($arr,$value);

76.说出数组涉及到的常用函数。

array--声明一个数组
count--计算数组中的单元数目或对象中的属性个数
foreach--遍历数组
list--遍历数组
explode--将字符串转成数组
implode--将数组转成一个新字符串
array_merge--合并一个或多个数组
is_array--检查是否是数组
print_r--输出数组
sort--数组排序
array_keys--返回数组中所有的键名
array_values--返回数组中所有的值
key--从关联数组中取得键名

77.字符串的常用函数?

trim()--去除字符串首尾处的空白字符(或者其他字符)
strlen()--字符串长度
substr()--截取字符串
str_replace()--替换字符串函数
substr_replace()--对指定字符串中的部分字符串进行替换
strstr()--检索字符串函数
explode()--分割字符串函数
implode()--将数组合并成字符串
str_repeat()--重复一个字符串
addslashes();--转义字符串
htmlspecialchars()--THML实体转义

78

$a = ‘01‘;
$result = 1;
if(in_array($a, array(‘1‘))){
    $result = 2;
}elseif($a == ‘1‘){
    $result = 3;
}elseif($a == ‘01‘){
    $result = 4;    
}else{
    $result = 5;
}
echo $result;

结果为

2

80.php函数名是否区分大小写

不区分
函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。

82.翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。

如:输入"This is PHP",输出"PHP is This"(非必要请不要使用PHP自带函数)

<?php
header("content-type:text/html;charset=utf-8");
function reverse($str){
    $arr = explode(‘ ‘, $str);
    $arr = array_reverse($arr);
    return implode(‘ ‘, $arr);
}
$str = ‘This is PHP‘;
echo reverse($str);

83.请列举出你所知道的全局环境变量

$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;

84.设有这样一个数组

$a=array(

array(id=>0),

array(id=>1),

array(id=>2),

......)

id=>0-10000,请问你如何使用PHP判断id=>500是否在这个数组内?

in_array()

85.

<?php
header("content-type:text/html;charset=utf-8");
$a = $b =$c =0;
$a =$b &&$c;
var_dump($a);
var_dump($b);
var_dump($c);

结果

boolean false
int 0
int 0


本文出自 “津沙港湾” 博客,请务必保留此出处http://11410485.blog.51cto.com/11400485/1853015

PHP 面试题