php程序员面试题及答案

发布时间:2020-12-21编辑:脚本学堂
本文介绍下,一份不错的php程序员面试题,并附有完整的答案,有需要的朋友,或正在找工作的phper朋友们,可以参考学习下。

答案
1. 类是对象的蓝图(对象是类的实例)。
2. 正确答案是 B、C 和 D。set_value 方法使用了错误的表达式$this->$my_value,因此该方法实际上是空的(这在 pHp5 里会导致一个错误,但在 pHp4 中不会。——译者注)。
3. 答案是 C。pHp4 中无法限制对类成员的访问,而在 pHp5 中则可以通过 private 关键字实现。

4. 单件模式可以限制一个类被实例化的次数。

5. 尽管其他编程语言允许多重继承,但在 pHp 的对象模型中却不可以。因此答案是 A。

6. 方框中的代码表现的是抽象方法(abstract method)的实现。如果这个类继承自其他类,

而 my_funct 方法在子类中被调用时没有覆盖,代码将抛出一个错误。虽然只是近似的

实现了抽象方法,但在 pHp4 有限的对象模型中,这已经做得很好了。

7. pHp5 有统一的构造函数(__construct()),但在 pHp4 中,构造函数就是和类有相同名

称的方法。对于名为 testclass 的类,它的构造函数就是 testclass()。答案是 C。

8. __sleep()和__wakeup()能被用来自定义对象的序列化过程。正确答案是 C。

9. pHp4 中没有题目选项里所列的任何一个概念。答案是 D。

10.pHp 中,在类的内部访问其成员和方法,要用$this 这个特殊变量。因此答案是 B。

11.正确答案是 D。my_class::_my_class()不是合法的构造函数(方法名的开头多了个_),因此脚本不会输出任何东西。你可能觉得这题是在考眼力而不是知识,是的,我们就是这么打算。仔细想想你就会同意——绝大多数的 bug 都是由错误的拼写造成的。这题并不是在戏弄你,而是考验你的排错能力。

12.pHp4 把对象视作标量进行处理,当$a 赋给$b 时,解释器创建对象的副本,因此对后一个对象的赋值不会影响到原先的对象。答案是 B。但是要注意,pHp5 里就不是这样处理的了(将会输出 10)。

13.一上来,构造函数 my_class 通过引用,将自身存储在了变量$global_obj 中。你可能会因此觉得,当我们后来吧$global_obj->my_value 的值变为 10 时,$a 也会相应改变。

不幸的是,new 操作符只返回的不是引用,而是副本。脚本输出 5,答案是 A。

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

15.题中所示的语法是用来进行静态调用的。当方法被静态调用时,它们就像一个独立的函数,与任何类的实例无关。答案是 A。

16.没有。pHp4 只允许声明静态函数变量,没有静态类变量。

17.答案是 A。类 b 的属性$myvar 将在 b 的父类——类 a 调用构造函数时被定义,此外,像 pHp4 中的普通变量一样,定义类变量时也不需要给它赋值。类 b 在其父类调用构造函数之前就给$myvar 赋了值,所以不管之后如何赋值,输出都是 1。

18.pHp4 中无法即时装载类——它们必须在使用前就仔细声明好。pHp5 中,可以使用__autoload 魔术函数提醒解释器在找不到需要的类时尝试自动调用。因此答案是 D。

19.为软件设计和编程中的常规问题提供良好的解决方案,这显然是在说设计模式。

20.脚本什么都不输出(答案是 D)。因为子类的构造函数不会自动调用父类的构造函数。