你必须有一定的经验才能完成这套ZEND测试题。这并不意味着你必须是超级高手——很简单,为了通过这套测试,你只需在日常生活有足够的接触PHP的时间。
因此,了解自己对“基础”的掌握程度非常重要。尽管这些知识非常“底层”,但却是PHP永恒的基本元素。没有回答好本套测试其他章节的题目可能只是说明那些问题并不是你日常PHP编程中经常接触的部分;但如果在本章就做错大量的题目,你就要警惕了。总之,如果你基础薄弱,就会影响你对进阶知识的理解。
问题
1.选择合适的答案填入空白处
PHP是一种______脚本语言,基于______引擎。PHP最常被用来开发动态的______内容,此外,它同样还可被用来生成______(以及其他)文档。
A.动态,PHP,数据库,HTML
B.嵌入式,Zend,HTML,XML
C.基于Perl的,PHP,Web,静态
D.嵌入式,Zend,Docbook文档,MySQL
E.基于Zend的,PHP,图像,HTML
1.唯一有意义的答案是B。PHP是一种基于Zend引擎的脚本语言,它通常被嵌入在HTML代码中。它主要被用来开发HTML文档,但是也可以用它来开发其他类型的文档,比如XML。
2.以下哪种标签不是PHP起始/结束符?
A.<% %>
B.<? ?>
C.<?= ?>
D.<! !>
E.<?php ?>
2.PHP编程中,人们不太使用<% %>和<? ?>两个标签,但它们确实是合法的PHP界定符。<! !>标签是非法的,因此正确的答案是D。记住,根据php.ini文件中的配置不同,这当中的某些标签无法在特定的情况下使用。
3.以下代码哪个不符合PHP语法?
A.$_10
B.${“MyVar”}
C.&$something
D.$10_somethings
E.$aVaR
3.PHP变量以一个美元符号为开头,后面跟上任意数量的数字、字母和下划线。${“MyVar”}是一个合法的变量名,它使用的是较松散的命名约定。&$something是对$something的引用。然而,变量名不能以数字为开头,$10_somethings是非法的,因此答案是D。
4.运行以下代码将显示什么?
复制PHP内容到剪贴板
4.注意,$myarray的键值并没有打上引号。所以,正在访问的键不是myvalue字符串,而是常量myvalue的值。最终访问的是$myarray[10],值是Dog,答案是A。
PHP代码:
<?php
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
4.注意,$myarray的键值并没有打上引号。所以,正在访问的键不是myvalue字符串,而是常量myvalue的值。最终访问的是$myarray[10],值是Dog,答案是A。
5. print()和echo()有什么区别?
A.print()能作为表达式的一部分,echo()不能
B.echo()能作为表达式的一部分,print()不能
C.echo()能在CLI(命令行)版本的PHP中使用,print()不能
D.print()能在CLI(命令行)版本的PHP中使用,echo()不能
E.没有区别:两个函数都打印文本!
5.尽管print()和echo()在绝大多数情况下可以互换使用,但它们之间还是有一处不同。print()是函数,有返回值;echo()实际上是一个语言结构,没有返回值,并且不能在表达式中使用。因此,答案是A。
6.以下脚本输出什么?
复制PHP内容到剪贴板
PHP代码:
<?php
$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
6.%运算符表示取模,它返回两个操作数相除的余数。<<是左移运算符,相当于乘以2的N次方。最后的答案乘以了一个浮点数,改变了它的数据类型。但是,由于小数点后是零,因此输出的结果不包含小数部分。答案是256(D)。
7.如何给变量$a,$b和$c赋值才能使以下脚本显示字符串“Hello, World!”?
复制PHP内容到剪贴板
PHP代码:
<?php
$string = "Hello, World!";
$a = ?;
$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
7.根据条件式的逻辑,要想得到Hello, World!字符串,必须要在第一个if结构中满足else的条件。因此$a必须为False,然后$b也必须为False。最内层的条件语句的实现要求先前的两个变量($a和$b)是False,而$c必须是True(答案是D)。
8.以下脚本输出什么?
复制PHP内容到剪贴板
PHP代码:
<?php
$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’组成的字符串
8.正确答案是C。从PHP4.2.0开始,除非已经给定了一个伪随机整数列,否则不再需要用srand()函数初始化随机数生成器。此外,即使随机数生成器没有被事先播种,脚本仍然会生成49个伪随机字符。尽管$array变量是字符串,但可以用访问数组的方式进行访问——使用数字索引访问某个位置上的字符。最后,for循环将从1开始执行到50,也就是执行了49次。
9.哪种语句结构用来表现以下条件判断最合适?
复制PHP内容到剪贴板
PHP代码:
<?php
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语句
9.用一系列的if…else语句来检查一个条件的代码块,最适合用switch语句来替代。
复制PHP内容到剪贴板
PHP代码:
<?php
switch($a) {
case 'a':
somefunction();
break;
case 'b':
anotherfunction();
break;
case 'c':
dosomething();
break;
default:
donothing();
}
?>
因为if语句中有一个捕捉所有其他条件的else,对应的,switch代码块需要一个default。正确答案是E。
10.要修改每个元素的值,如何遍历$myarray数组最合适?
复制PHP内容到剪贴板
PHP代码:
<?php
$myarray = array ("My String","Another String","Hi, Mom!");
?>
A.用for循环
B.用foreach循环
C.用while循环
D.用do…while循环
E.办不到!
10.通常情况下,foreach语句是遍历数组的首选。但是,由于foreach语句是在数组的副本上进行操作,而我们需要给数组中每个元素重新赋值,所以在这里foreach就不适用了。尽管也可以用while循环和do…while循环,但由于数组是顺序索引的,最合适的语句还是for语句。因此答案是A。
复制PHP内容到剪贴板
PHP代码:
<?php
$myarray = array ("My String", "Another String", "Hi, Mom!");
for($i = 0; $i < count($myarray); $i++)
{
$myarray[$i] .= " ($i)";
}
?>
11.考虑如下代码片段:
复制PHP内容到剪贴板
PHP代码:
<?php
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
11.由于题目只允许填写一行代码,唯一合适的是for循环,因此答案只能是C或者D。要选出能生成正确结果的for循环,我们必须先复习一下for循环的构成要素。PHP中,for循环是这样声明的:
for(<初始化>;<继续执行,直到>;<重复执行>)
<初始化>在循环开始时执行一次,然后for循环开始执行大括号内的代码,直到<继续执行,直到>的值为False。每完成一次循环,执行一次<重复执行>。因此,正确的代码块应该是:
for ($idx = 1; $idx < STOP_AT; $idx *= 2)
答案是C。
12.为用户定义函数is_leap()选择一个合适的函数声明。is_leap使用2000作为默认年份。
复制PHP内容到剪贴板
PHP代码:
<?php
/* 函数声明处 */
{
$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 default 2000)
D.function is_leap($year)
E.function is_leap(2000 = $year)
12.5个选项中,只有两个是合法的PHP函数声明(A和D)。在这两个选项中,只有一个设置了参数的默认值——答案是A。
13.运行以下代码将显示什么值?假设代码运行时的URL是:testscript.php?c=25
复制PHP内容到剪贴板
PHP代码:
<?php
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
13.本题考察PHP中变量作用域的相关知识。你必须明确global关键字是如何将变量引入本地域的,以及$_GET、$_POST、$_COOKIE、$_REQUEST等超级全局变量的作用域。本题中,最终的数学表达式是5+25-25-10,等于-5,答案是B。
14.考虑如下代码:
复制PHP内容到剪贴板
PHP代码:
<?php
function myfunction($a, $b = true)
{
if($a && !$b) {
echo "Hello, World!\n";
}
}
$s = array(0 => "my",
1 => "call",
2 => '$function',
3 => ' ',
4 => "function",
5 => '$a',
6 => '$b',
7 => 'a',
8 => 'b',
9 => '');
$a = true;
$b = false;
/* Group A */
$name = $s[?].$s[?].$s[?].$s[?].$s[?].$s[?];
/* Group B */
$name(${$s[?]}, ${$s[?]});
?>
脚本中的每个问号(?)代表$s数组的一个数字索引。要想代码执行时显示Hello, World!字符串,该如何选择数字索引?
A.Group A: 4,3,0,4,9,9 Group B: 7,8
B.Group A: 1,3,0,4,9,9 Group B: 7,6
C.Group A: 1,3,2,3,0,4 Group B: 5,8
D.Group A: 0,4,9,9,9,9 Group B: 7,8
E.Group A: 4,3,0,4,9,9 Group B: 7,8
14.函数能被以一个包含着函数名的变量后面加上括号(以及必要的参数)的形式动态调用。对于Group A来说,合适的索引组合是0,4,9,9,9,9,产生字符串myfunction。另一方面,参数将使用${}结构的可变变量。对Group B来说,合适的索引应该是7和8,等于${‘a’}$和{‘b’}——即$a和$b。因此答案是D。
15.运行时(run-time)包含一个PHP脚本使用______,而编译时(compile-time)包含一个PHP脚本使用______。
A.include_once, include
B.require, include
C.require_once, include
D.include, require
E.以上皆可
15.在较新版本的PHP中,require(或requier_once())和include()(或include_once())只有一个区别——如果包含的文件不存在,前者将产生一个致命错误,同时终止脚本的执行;而后者只会产生一个警告。因此答案E正确。
16.什么情况下声明函数时不能给参数赋默认值?
A.当参数是布尔值时
B.当函数是类中的成员时
C.当参数是通过引用传递时
D.当函数只有一个参数时
E.永远不会
16.当参数被声明为通过引用传递时,你不能给它赋默认值,此时解释器期望获得一个能在函数内部进行修改的变量。答案是C。
17.______操作符在两个操作数中有一个(不是全部)为True时返回True。
答案:____________
17.正确答案是逻辑异或(xor)运算符。
18.全等运算符===如何比较两个值?
A.把它们转换成相同的数据类型再比较转换后的值
B.只在两者的数据类型和值都相同时才返回True
C.如果两个值是字符串,则进行词汇比较
D.基于strcmp函数进行比较
E.把两个值都转换成字符串再比较
18.全等运算符比较两个操作数的数据类型和值,两者中有一个不同,都会返回False。因此答案是B。
19.以下哪个选项是把整型变量$a的值乘以4?(双选)
A.$a *= pow (2, 2);
B.$a >>= 2;
C.$a <<= 2;
D.$a += $a + $a;
E.一个都不对
19.答案是A和C。A选项中,pow函数计算2的平方,答案是4。C选项中,左移运算符将$a的值左移两位,相当于乘以4。
20.一段脚本如何才算彻底终止?
A.当调用exit()时
B.当执行到文件结尾时
C.当PHP崩溃时
D.当Apache由于系统故障而终止时
20.答案是A。一段脚本并不会在执行到文件末尾时终止,所以当前文件才能被其他脚本包含。至于PHP和Apache崩溃,这两个说法就太恶搞了。
答案速查
1.B
2.D
3.D
4.A
5.A
6.D
7.D
8.C
9.E
10.A
11.C
12.A
13.B
14.D
15.E
16.C
17.xor
18.B
19.AC
20.A