php程序员面试题及答案

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

一、问题部分

1. 对象的蓝图是什么?
答案:____________

2. 以下代码执行后,数组$a->my_value 中储存的值是什么?(三选)
 

class my_class
{
var $my_value = array();
function my_class ($value)
{
$this->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’);
?>
 

A.c
B.b
C.a
D.d
E.e

3. 如何让类中的某些方法无法在类的外部被访问?
A.把类声明为 private
B.把方法声明为 private
C.无法实现
D.编写合适的重载方法(overloading method)

4. 哪种 OOp 设计模式能让类在整个脚本里只实例化一次?
A.MVC 模式
B.抽象工厂模式(Abstract factory)
C.单件模式(Singleton)
D.代理模式(proxy)
E.状态模式(State)

5. 借助继承,我们可以创建其他类的派生类。那么在 pHp 中,子类最多可以继承几个父类?
A.1 个
B.2 个
C.取决于系统资源
D.3 个
E.想要几个有几个

6. 以下脚本近似的表示了一种在 pHp4 中无法实现的特性,请问这个特性叫什么?
 

复制代码 代码示例:
class my_class
{
function my_funct ($my_param)
{
user_error ("please define me", E_ERROR);
}
function b()
{
return 10;
}
}
?>

A.多重继承
B.接口
C.抽象方法
D.private 方法
E.函数重载(function overloading)

7. 假设定义了一个 testclass 类,它的构造函数的函数名是什么?
15
A.__construct
B.initialize
C.testclass
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.抽象类
B.ppp 方法
C.ppp 方法和接口
D.以上所有都不可用
E.以上所有都可用

10.如何在类的内部调用 mymethod 方法?
A.$self=>mymethod();
B.$this->mymethod();
C.$current->mymethod();
D.$this::mymethod()
E.以上都不对

11.以下脚本输出什么?
 

复制代码 代码示例:
class my_class
{
var $my_var;
function _my_class ($value)
{
$this->my_var = $value;
}
}
$a = new my_class (10);
echo $a->my_var;
?>
 

A.10
B.Null
C.Empty
D.什么都没有
E.一个错误

12.以下脚本输出什么?
 

复制代码 代码示例:
class my_class
{
var $value;
}
$a = new my_class;
$a->my_value = 5;
$b = $a;
$b->my_value = 10;
echo $a->my_value;
?>
 

A.10
B.5
C.2
D.Null
E.什么都没有

13.以下脚本输出什么?
 

复制代码 代码示例:
$global_obj = null;
class my_class
{
var $value;
function my_class()
{
global $global_obj;
$global_obj = &$this;
}
}
$a = new my_class;
$a->my_value = 5;
$global_obj->my_value = 10;
echo $a->my_value;
?>


A.5
B.10
C.什么都没有
D.构造函数将报错
E.510

14.考虑如下一段代码,执行时,$eight_tenths->to_string 方法返回的字符串是 8/10 而不是希望的 4/5,为什么?
 

复制代码 代码示例:

class fraction {
var $numerator;
var $denominator;
function fraction($n, $d) {
$this->set_numerator($n);
$this->set_denominator($d);
}
function set_numerator($num) {
$this->numerator = (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) {
$gcd = gcd($fraction->numerator,
$fraction->denominator);
$fraction->numerator /= $gcd;
$fraction->denominator /= $gcd;
}
$eight_tenths = new fraction(8,10);
/* Reduce the fraction */
reduce_fraction($eight_tenths);
var_dump($eight_tenths->to_string());
?>
 

A.reduce_fraction 函数必须返回一个值
B.reduce_fraction 函数必须接受一个整型值
C.gcd 函数有问题
D.必须通过引用的方式传递$eight_tenths 对象
E.对象的实例不能传递给方法以外的其他结构。

15.以下代码是做什么的?
 

复制代码 代码示例:
<?php
require_once("myclass.php");
myclass::mymethod();
?>
 

A.静态调用 mymethod 方法
B.生成 myclass 的实例并调用 mymethod 方法
C.产生一个语法错误
D.默认 myclass 类最后被创建出的实例并调用 mymethod()
E.调用名为 myclass::mymethod()的函数

16.pHp 中有静态类变量吗?
A.有
B.没有

17.以下脚本输出什么?
 

复制代码 代码示例:
class a
{
function a ($x = 1)
{
$this->myvar = $x;
}
}
class b extends a
{
var $myvar;
function b ($x = 2)
{
$this->myvar = $x;
parent::a();
}
}
$obj = new b;
echo $obj->myvar;
?>

A.1
B.2
C.一个错误,因为没有定义 a::$myvar
D.一个警告,因为没有定义 a::$myvar
E.什么都没有

18.如何即时加载一个类?
A.使用__autoload 魔术函数
B.把它们定义为 forward 类
C.实现一个特殊的错误处理手段
D.不可能
E.用有条件限制的 include 来包含它们

19.__________提供了一个高性能的解决面向对象中重复出现的问题的方案?
答案:__________

20.以下脚本输出什么?
 

复制代码 代码示例:
class a
{
function a()
{
echo parent called;
}
}
class b
{
function b()
{
}
}
$c = new b();
?>

A.parent called
B.一个错误
C.一个警告
D.什么都没有