[Zend权威认证试题讲解]第二章-用PHP4进行面向对象编程
尽管PHP4的OOP性能不强,但它还是能够被用来构建可行的面向对象的代码结构——只要你知道对象模型的缺陷,并且小心的处理它们。PHP5在对象的处理方面做了很多改变,你或许会因此更倾向于完全忽略PHP4。但事实上,许多用OOP的程序员从很早以前就开始用老版本的PHP编写软件了。所以,大量的OOP代码早已存在,甚至在人们跳到PHP5上进行开发之前。P4A DE/o gw
本章不仅考察你对面向对象知识的总体掌握,还包括对PHP4特有的OOP实现机制的认识。 U]#| md_;A,nl
EVoe| f
问题^a0m5un#F$K
1.对象的蓝图是什么?
答案:____________ s"eJL#B!n u0q p
sW)V/Q]6k Y
w_+ZR,K-}0G
2.以下代码执行后,数组$a->my_value中储存的值是什么?(三选)[code]
<?php
class my_class[\n"MA*d3|4S
{CXQ'S8y-cvC c d,f
var $my_value = array();^n]5[+L5R
function my_class ($value)
{
$this->my_value[] = $value;
}
function set_value ($value)
{O:LzB0POt@s5j
$this->$my_value = $value;
}e;}?)Y%L"SN3K/ZJ
}0C8f(`.GN"\
$a = new my_class ('a');
$a->my_value[] = 'b';
$a->set_value ('c');
$a->my_class('d');
?>[/code]A.cU| t~| ^vK1g
B.bm:[CY"I+b,K8O:Uv
C.a!rr&JUb!Qx Hw
D.d
E.e7fbrDuqS.w1O E8q
Q?!w+WJK NM7E
3.如何让类中的某些方法无法在类的外部被访问?j/k yCH? P cQ*b
c/n UeXT
A.把类声明为private
B.把方法声明为private
C.无法实现(V)v.p7tA+B
D.编写合适的重载方法(overloading method)jj%N/Q3x
4.哪种OOP设计模式能让类在整个脚本里只实例化一次?
*s"o)S/ZaN
A.MVC模式
B.抽象工厂模式(Abstract factory)
C.单件模式(Singleton)0jspm5q.c zR$jL#B~G
D.代理模式(Proxy)W`B B+f[1X/TG9[^
E.状态模式(State)r-j$P v|Bh"a
Q1REazE?
5.借助继承,我们可以创建其他类的派生类。那么在PHP中,子类最多可以继承几个父类?
A.1个-P r(gz2X3Bc6@ D
B.2个 h n3H)\!l&}y
C.取决于系统资源
D.3个
E.想要几个有几个
4g-KC9gtrk
6.以下脚本近似的表示了一种在PHP4中无法实现的特性,请问这个特性叫什么?[code] 8a%K` ig|o$G|
<?php
class my_class1N p8DH+Y:nI i
{
function my_funct ($my_param)-nF3X)alU*x
{
user_error ("Please define me", E_ERROR);
}
function b()
{1ol0TUZ%`,R$M7]9`:} s
return 10;7ebQ cR)?
}
}-~1Syc|&e
?>[/code]A.多重继承
B.接口
C.抽象方法 l{Nm$U H
D.Private方法
E.函数重载(function overloading)z8o7\l3a;f/S}7D
0p6pJv&LZ K
7.假设定义了一个testclass类,它的构造函数的函数名是什么?'E)z$q{:J"Z
qw1A+s9x!oL
A.__constructb] y_M)] ~
B.initialize
C.testclassY#Cd:Q$y
D.__testclass
E.只有PHP5才支持构造函数
v'[Ma5T2k
"C2`D1M7t Z+P:W
8.一个类如何覆盖默认的序列化机制?
V.a u;f(J*o.tI6q0m5n
A.使用__shutdown和__startup方法R1P;rx+F7?7x
B.调用register_shutdown_function()函数
C.使用__sleep()和__wakeup()方法 e5C-e` F
D.无法覆盖默认序列化机制
E.使用ob_start()将类放入输出缓冲中"i WB/fLC0C'?
9.以下哪些面向对象的概念无法在PHP4中实现?m8X-id8b^P
@抽象类
@Final类a-g I${@
@Public、private、protected(PPP)方法
@接口'gZw6mC1wE
0Ybs7e(_k
A.抽象类t dY9Y:_4}
B.PPP方法!O'^$x2XZ7iu
C.PPP方法和接口
D.以上所有都不可用/w T#ts:h$J
E.以上所有都可用
V pz(\bwsO_
10.如何在类的内部调用mymethod方法?
%n;v'g0b?Q
A.$self=>mymethod();
B.$this->mymethod();;~I'l7[8]u?O`
C.$current->mymethod();
D.$this::mymethod()
E.以上都不对
zK7[+J@e'G
11.以下脚本输出什么?[code] M)vt\nZ"C'rO"y
<?php
class my_classu @s)r0R4|.c;n
{
var $my_var;
function _my_class ($value)
{
$this->my_var = $value;[j3y`)t0c+\ V
}
}
$a = new my_class (10);