zend 认证考试模拟题之二面向对象

上传人:第*** 文档编号:32819514 上传时间:2018-02-12 格式:DOC 页数:9 大小:36KB
返回 下载 相关 举报
zend 认证考试模拟题之二面向对象_第1页
第1页 / 共9页
zend 认证考试模拟题之二面向对象_第2页
第2页 / 共9页
zend 认证考试模拟题之二面向对象_第3页
第3页 / 共9页
zend 认证考试模拟题之二面向对象_第4页
第4页 / 共9页
zend 认证考试模拟题之二面向对象_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《zend 认证考试模拟题之二面向对象》由会员分享,可在线阅读,更多相关《zend 认证考试模拟题之二面向对象(9页珍藏版)》请在金锄头文库上搜索。

1、2 用 PHP4 进行面向对象编程 尽管 PHP4 的 OOP 性能不强,但它还是能够被用来构建可行的面向对象的代码结构 只要你知道对象模型的缺陷,并且小心的处理它们。 PHP5 在对象的处理方面做了很多改变,你或许会因此更倾向于完全忽略PHP4。但事 实上,许多用 OOP 的程序员从很早以前就开始用老版本的 PHP 编写软件了。所以,大量 的 OOP 代码早已存在,甚至在人们跳到 PHP5 上进行开发之前。 本章不仅考察你对面向对象知识的总体掌握,还包括对 PHP4 特有的 OOP 实现机制的 认识。 14 问题 1 对象的蓝图是什么? 答案:_ 2 以下代码执行后,数组$a-my_valu

2、e 中储存的值是什么?(三选) my_value = $value; function set_value ($value) $this-$my_value = $value; $a = new my_class (a); $a-my_value = b; $a-set_value (c); $a-my_class(d); ? Ac Bb Ca Dd Ee 3 如何让类中的某些方法无法在类的外部被访问? A把类声明为 private B把方法声明为 private C无法实现 D编写合适的重载方法(overloading method) 15 4 哪种 OOP 设计模式能让类在整个脚本里只实例

3、化一次? AMVC 模式 B抽象工厂模式(Abstract factory ) C单件模式(Singleton) D代理模式(Proxy) E状态模式(State ) 5 借助继承,我们可以创建其他类的派生类。那么在 PHP 中,子类最多可以继承几个父 类? A1 个 B2 个 C取决于系统资源 D3 个 E想要几个有几个 6 以下脚本近似的表示了一种在 PHP4 中无法实现的特性,请问这个特性叫什么? A多重继承 B接口 C抽象方法 DPrivate 方法 E函数重载(function overloading) 7 假设定义了一个 testclass 类,它的构造函数的函数名是什么? 16

4、A_construct Binitialize Ctestclass D_testclass E只有 PHP5 才支持构造函数 8 一个类如何覆盖默认的序列化机制? A使用_shutdown 和_startup 方法 B调用 register_shutdown_function()函数 C使用 _sleep()和_wakeup()方法 D无法覆盖默认序列化机制 E使用 ob_start()将类放入输出缓冲中 9 以下哪些面向对象的概念无法在 PHP4 中实现? ? 抽象类 ? Final 类 ? Public、private、protected(PPP)方法 ? 接口 A抽象类 BPPP 方法

5、 CPPP 方法和接口 D以上所有都不可用 E以上所有都可用 10如何在类的内部调用 mymethod 方法? A$self=mymethod(); B$this-mymethod(); C$current-mymethod(); D$this:mymethod() E以上都不对 11以下脚本输出什么? my_var = $value; $a = new my_class (10); echo $a-my_var; ? A10 BNull CEmpty D什么都没有 E一个错误 12以下脚本输出什么? my_value = 5; $b = $a; $b-my_value = 10; echo

6、$a-my_value; ? A10 B5 C2 DNull E什么都没有 13以下脚本输出什么? my_value = 5; $global_obj-my_value = 10; echo $a-my_value; ? A5 B10 C什么都没有 D构造函数将报错 E510 14考虑如下一段代码,执行时,$eight_tenths-to_string 方法返回的字符串是8/10 而不是 希望的 4/5,为什么? set_numerator($n); $this-set_denominator($d); function set_numerator($num) $this-numerator

7、= (int)$num; function set_denominator($num) $this-denominator = (int)$num; function to_string() return $this-numerator / $this-denominator; function gcd($a, $b) return ($b 0) ? gcd($b, $a % $b) : $a; function reduce_fraction($fraction) 19 $gcd = gcd($fraction-numerator, $fraction-denominator); $frac

8、tion-numerator /= $gcd; $fraction-denominator /= $gcd; $eight_tenths = new fraction(8,10); /* Reduce the fraction */ reduce_fraction($eight_tenths); var_dump($eight_tenths-to_string(); ? Areduce_fraction 函数必须返回一个值 Breduce_fraction 函数必须接受一个整型值 Cgcd 函数有问题 D必须通过引用的方式传递$eight_tenths 对象 E对象的实例不能传递给方法以外的其

9、他结构。 15以下代码是做什么的? A静态调用 mymethod 方法 B生成 myclass 的实例并调用 mymethod 方法 C产生一个语法错误 D默认 myclass 类最后被创建出的实例并调用 mymethod() E调用名为 myclass:mymethod()的函数 16PHP 中有静态类变量吗? A有 B没有 17以下脚本输出什么? myvar = $x; class b extends a var $myvar; function b ($x = 2) $this-myvar = $x; parent:a(); $obj = new b; echo $obj-myvar;

10、? A1 B2 C一个错误,因为没有定义 a:$myvar D一个警告,因为没有定义 a:$myvar E什么都没有 18如何即时加载一个类? A使用_autoload 魔术函数 B把它们定义为 forward 类 C实现一个特殊的错误处理手段 D不可能 E用有条件限制的 include 来包含它们 19_提供了一个高性能的解决面向对象中重复出现的问题的方案? 答案:_ 20以下脚本输出什么? AParent called B一个错误 C一个警告 D什么都没有 22 答案 1 类是对象的蓝图(对象是类的实例)。 2 正确答案是 B、C 和 D。set_value 方法使用了错误的表达式$thi

11、s-$my_value,因此该 方法实际上是空的(这在 PHP5 里会导致一个错误,但在 PHP4 中不会。译者注)。 3 答案是 C。PHP4 中无法限制对类成员的访问,而在 PHP5 中则可以通过private 关键字 实现。 4 单件模式可以限制一个类被实例化的次数。 5 尽管其他编程语言允许多重继承,但在 PHP 的对象模型中却不可以。因此答案是 A。 6 方框中的代码表现的是抽象方法(abstract method)的实现。如果这个类继承自其他类, 而 my_funct 方法在子类中被调用时没有覆盖,代码将抛出一个错误。虽然只是近似的 实现了抽象方法,但在 PHP4 有限的对象模型中

12、,这已经做得很好了。 7 PHP5 有统一的构造函数(_construct() ),但在 PHP4 中,构造函数就是和类有相同名 称的方法。对于名为 testclass 的类,它的构造函数就是 testclass()。答案是 C。 8 _sleep() 和_wakeup()能被用来自定义对象的序列化过程。正确答案是 C。 9 PHP4 中没有题目选项里所列的任何一个概念。答案是 D。 10PHP 中,在类的内部访问其成员和方法,要用$this 这个特殊变量。因此答案是 B。 11 正确答案是 D。my_class:_my_class()不是合法的构造函数(方法名的开头多了个_), 因此脚本不会

13、输出任何东西。你可能觉得这题是在考眼力而不是知识,是的,我们就 是这么打算。仔细想想你就会同意绝大多数的 bug 都是由错误的拼写造成的。这 题并不是在戏弄你,而是考验你的排错能力。 12PHP4 把对象视作标量进行处理,当$a 赋给$b 时,解释器创建对象的副本,因此对后 一个对象的赋值不会影响到原先的对象。答案是 B。但是要注意,PHP5 里就不是这样 处理的了(将会输出 10)。 13一上来,构造函数 my_class 通过引用,将自身存储在了变量$global_obj 中。你可能会 因此觉得,当我们后来吧$global_obj-my_value 的值变为 10 时,$a 也会相应改变。

14、 不幸的是,new 操作符只返回的不是引用,而是副本。脚本输出 5,答案是A。 14PHP 中,把对象传递给函数或者方法时,默认传递的是值。这意味着通过参数传递给 函数的对象,其实是对象的副本。这点导致了在函数或方法里对对象进行改动时,不 会影响函数外的原先的那个对象。 23 回到第 14 题中,这就说明对象$eight_tenths 从来没有被 reduce_fraction 函数改动过, 而$fraction 对象(参数)则被改动了。如果要在函数内部改动对象,就必须以引用的 方式传递参数: function reduce_fraction(&$fraction) 答案是 D。 15题中所示

15、的语法是用来进行静态调用的。当方法被静态调用时,它们就像一个独立的 函数,与任何类的实例无关。答案是 A。 16没有。PHP4 只允许声明静态函数变量,没有静态类变量。 17答案是 A。类 b 的属性$myvar 将在 b 的父类 类 a 调用构造函数时被定义,此外, 像 PHP4 中的普通变量一样,定义类变量时也不需要给它赋值。类 b 在其父类调用构 造函数之前就给$myvar 赋了值,所以不管之后如何赋值,输出都是 1。 18PHP4 中无法即时装载类它们必须在使用前就仔细声明好。PHP5 中,可以使用 _autoload 魔术函数提醒解释器在找不到需要的类时尝试自动调用。因此答案是 D。 19为软件设计和编程中的常规问题提供良好的解决方案,这显然是在说设计模式。 20脚本什么都不输出(答案是 D)。因为子类的构造函数不会自动调用父类的构造函数。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号