您的位置:首页 > 职场人生

PHP 面试题解析

2014-11-11 17:09 85 查看
转载请注明出处,尊重原创:/article/1807099.html,谢谢!

1. 选择合适的答案填入空白处

PHP 是一种______脚本语言,基于______引擎。PHP最常被用来开发动态的______内

容,此外,它同样还可被用来生成______(以及其他)文档。

A.动态,PHP,数据库,HTML

B.嵌入式,Zend,HTML,XML

C.基于 Perl 的,PHP,Web,静态

D.嵌入式,Zend,Docbook文档,MySQL

E.基于 Zend 的,PHP,图像,HTML

解析:这是一个理论基础题,稍微记了一下的都能打出来,

PHP 是一种嵌入式脚步语言,这肯定是啊,是不是经常在html代码里嵌入<? php ?>这样的代码?;

基于zend引擎这个没什么说的;后面的自己记吧;

正确答案是:B

2.以下哪种标签不是 PHP 起始/结束符?

A.<% %>

B.//

C.<?php ?>

D./* */

E.

解析:正确答案是:D

3.以下代码哪个不符合 PHP 语法?

A.$_10

B.${“MyVar”}

C.&$something

D.$10_somethings

E.$aVaR

解析:这个简单,考得是变量的命名规则,

命名规则:

PHP 变量以一个美元符号为开头,后面跟上任意数量的数字、字母和下划线;

注:变量名不能以数字为开头

依据此规则:答案自然是:D

4.运行以下代码将显示什么?

define(myvalue, "10");

$myarray[10] = "Dog";

$myarray[] = "Human";

$myarray['myvalue'] = "Cat";

$myarray["Dog"] = "Cat";

print "The value is: ";

print $myarray[myvalue]."\n";

?>

A.The Value is: Dog

B.The Value is: Cat

C.The Value is: Human

D.The Value is: 10

E.Dog

解析:

我们先看打印语句:$myarray[myvalue],这里要注意:数组”[]“里没有加引号,这是一个陷阱,等你跳;

要注意,没有加引号,那么就是访问的第一句定义的常量了,也就是10,应该是$myarray[10],答案自然就是:A了

注:看题要仔细,千万小心这种陷阱

5. print()和echo()有什么区别?

A.print()能作为表达式的一部分,echo()不能

B.echo()能作为表达式的一部分,print()不能

C.echo()能在CLI(命令行)版本的 PHP 中使用,print()不能

D.print()能在CLI(命令行)版本的 PHP 中使用,echo()不能

E.没有区别:两个函数都打印文本!

解析:

尽管 print()和 echo()在绝大多数情况下可以互换使用,但它们之间还是有一处不同。

print()是函数,有返回值;

echo()实际上是一个语言结构,没有返回值,并且不能在表达式中使用。

因此,答案是 A

6.以下脚本输出什么?

$a = 10;

$b = 20;

$c = 4;

$d = 8;

$e = 1.0;

$f = $c + $d * 2;

$g = $f % 20;

$h = $b - $a + $c + 2;

$i = $h << $c;

$j = $i * $e;

print $j;

?>

A.128

B.42

C.242.0

D.256

E.342

解析:

这种依然先看打印语句:print $j;然后往上走,$j需要$i和$e的值,再往上走,$i需要$h和$c的值,以此类推,最后得出:

$h = 20-10+4+2=16;$i = 16 << 4 = 256(<<是左移运算符,相当于乘以 2的 N 次方),最后的答案乘以了一个浮点数,改变了它的数据类型。但是,由于小数点

后是零,因此输出的结果不包含小数部分,所以答案是:D

7. 如何给变量$a,$b 和$c 赋值才能使以下脚本显示字符串“Hello, World!”?

$string = "Hello, World!";

$a = ?;

3

$b = ?;

$c = ?;

if($a) {

if($b && !$c) {

echo "Goodbye Cruel World!";

} else if(!$b && !$c) {

echo "Nothing here";

}

}

else {

if(!$b) {

if(!$a && (!$b && $c)) {

echo "Hello, World!";

} else {

echo "Goodbye World!";

}

} else {

echo "Not quite.";

}

}

?>

A.False, True, False

B.True, True, False

C.False, True, True

D.False, False, True

E.True, True, True

解析:

这种输出问题,一般都是考你的细心程度,一个个变量代入,然后结果自然出来:D

8.以下脚本输出什么?

$array = '0123456789ABCDEFG';

$s = '';

for ($i = 1; $i < 50; $i++) {

$s .= $array[rand(0,strlen ($array) - 1)];

}

echo $s;

?>

A.50 个随机字符组成的字符串

B.49 个相同字符组成的字符串,因为没有初始化随机数生成器

C.49 个随机字符组成的字符串

D.什么都没有,因为$array 不是数组

E.49 个字母‘G’组成的字符串

解析:

1. 看for循环里的代码:$i<50,从1开始,步伐为1,那就是循环49次;

2. 从 PHP4.2.0 开始,除非已经给定了一个伪随机整数列,否则不再需要用 srand()函数初始化随机数生成器。此外,即使随机数生成器没有被事先播种,脚本仍然会生成 49 个伪随机字符;

3. 尽管$array 变量是字符串,但可以用访问数组的方式进行访问——使用数字索引访问某个位置上的字符,这个如果怀疑,自己可以去定义一个字符串数组,然后数组形式打印即可验证。

9.哪种语句结构用来表现以下条件判断最合适?

if($a == 'a') {

somefunction();

} else if ($a == 'b') {

anotherfunction();

} else if ($a == 'c') {

dosomething();

} else {

donothing();

}

?>

A.没有 default 的 switch 语句

B.一个递归函数

C.while 语句

D.无法用别的形式表现该逻辑

E.有 default 的 switch 语句

解析:

毫无疑问,这一看题目和选项就知道肯定是switch了,至于怎么排除A,那么就请看:代码的最后一个else结尾,意思是其他的都走该代码块,自然使用switch时要用default来扑抓了。答案:E

10.要修改每个元素的值,如何遍历$myarray 数组最合适?

$myarray = array ("My String","AnotherString","Hi, Mom!");

?>

A.用 for 循环

B.用 foreach 循环

C.用 while 循环

D.用 do…while 循环

E.办不到!

解析:

一看题目,遍历用哪个?那肯定while和do.. while就不合适了,数组是顺序索引的嘛,在看要求是要修改元素的值,当然就直接for拉,虽然foreach是遍历数组的首选,但是都是使用的数组的副本,所以要修改还是用for。答案:A

11.考虑如下代码片段:

define("STOP_AT", 1024);

$result = array();

/* 在此处填入代码 */

{

$result[] = $idx;

}

print_r($result);

?>

标记处填入什么代码才能产生如下数组输出?

Array

{

[0] => 1

[1] => 2

[2] => 4

[3] => 8

[4] => 16

[5] => 32

[6] => 64

[7] => 128

[8] => 256

[9] => 512

}

A.foreach($result as $key =>$val)

B.while($idx *= 2)

C.for($idx = 1; $idx < STOP_AT;$idx *= 2)

D.for($idx *= 2; STOP_AT >=$idx; $idx = 0)

E.while($idx < STOP_AT) do $idx*= 2

解析:
这种一大串代码没什么好害怕的,简单。

由于题目只允许填写一行代码,唯一合适的是 for 循环,因此答案只能是C或者 D。要选出能生成正确结果的 for循环,我们必须先复习一下 for循环的构成要素。PHP中,

for 循环是这样声明的:for(<初始化>;<继续执行,直到>;<重复执行>)<初始化>在循环开始时执行一次,然后
for 循环开始执行大括号内的代码,直到<继续

执行,直到>的值为 False。每完成一次循环,执行一次<重复执行>。因此,正确的代

码块应该是:C

12.为用户定义函数 is_leap()选择一个合适的函数声明。is_leap 使用 2000 作为默认年份。

/* 函数声明处 */

{

$is_leap = (!($year %4) && (($year % 100) ||

!($year % 400)));

return $is_leap;

}

var_dump(is_leap(1987)); /* Displays false */

var_dump(is_leap()); /* Displays true */

?>

A.function is_leap($year = 2000)

B.is_leap($year default 2000)

C.function is_leap($year default2000)

D.function is_leap($year)

E.function is_leap(2000 = $year)

解析:

一眼一看,这函数申明只有AD两项没有问题,然后再看需求,要默认2000,那就直接A了

13.运行以下代码将显示什么值?假设代码运行时的 URL 是:testscript.php?c=25

function process($c, $d = 25)

{

global $e;

$retval = $c + $d - $_GET['c'] - $e;

return $retval;

}

$e = 10;

echo process(5);

?>

A.25

B.-5

C.10

D.5

E.0

解析:

第一看打印代码:echo process(5);再代入process()函数,则在process中则是:$c = 5 , $retval = 5+25-25-10=-5;答案:B

注:URL中get方式传入c的值为25,process函数里定义$e为global,全局的,所以为10,代入即可出结果。

14. foo() 与 @foo() 有什么分别?

解析:

foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。

@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。

很 多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们

15. “===” 是什么?试举一个“==”是真但“===”是假的例子

解析:

在JS里也有这个===,===:不仅比较值是否相等,还比较类型是否相同,是值相等&类型相同;

而==的话,只是比较值是否相等。

要举例也简单:

$param = 1;

if($param === true){

echo '==';

}else{

echo "===";

}

输出:===

$param = 1;

if($param == true){

echo '==';

}else{

echo "===";

}

输出:==

16. 输出2014-05-16 10:50:02的前一天的时间,时间格式为:“2014-05-15 10:50:02”

解析:

$attr = mktime(10,50,2,5,16,2014);

$attr1 = $attr-60*60*24;

echo date('Y-m-d H:i:s',$attr1);

****注:如有其他面试题有疑问,可以在本文下评论,定会全力解答!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: