php面试题之四——PHP面向对象(基础部分)

四、PHP面向对象

1. 写出 php 的 public、protected、private 三种访问控制模式的区别(新浪网技术部)

public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问

相关题目:请写出 PHP5 权限控制修饰符

private protected public

2. 设计模式考察:请用单态设计模式方法设计类满足如下需求:

请用 PHP5 代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)

<?phpclass Mysql { private static $instance = null; private $conn; // 构造方法,设置为private,不允许通过new获得对象实例 private function __construct(argument) { $conn = mysql_connect("localhost","root","root"); } // 获取实例方法 public function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } // 禁止克隆 private function __clone(){} } // 获得对象 $db = Mysql::getInstance(); ?>
3. 写出下列程序的输出结果(新浪网技术部)
<?phpclass a { protected $c; public function a() { $this->c = 10; } } class b extends a { public function print_data() { return $this->c; } } $b = new b(); echo $b->print_data(); ?>

输出结果 10

[!]4. PHP5 中魔术方法函数有哪几个,请举例说明各自的用法 (腾讯 PHP 工程师笔试题)

__sleep serialize 之前被调用
__wakeup unserialize 时被调用
__toString 打印一个对象时被调用
__set_state 调用 var_export 时被调用,用__set_state的返回值作为 var_export 的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set 函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset 一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用

相关题目:请写出 php5 的构造函数和析构函数

构造函数:__construct
析构函数:__destruct

5. 如何使用下面的类,并解释下面什么意思?
<?phpclass test{ function Get_test($num){ $num = md5(md5($num)."En"); return $num; } } $testObject = new test(); $encryption = $testObject->Get_test("itcast"); echo $encryption; ?>

双重 md5 加密

6. How would you declare a class named “myclass” with no methods or properties?(Yahoo)

class myclass{};

相关题目:如何声明一个名为“myclass”的没有方法和属性的类?
7. How would you create an object, which is an instance of “myclass”? (Yahoo)

$obj= new myclass();

相关题目:如何实例化一个名为“myclass”的对象?
8. How do you access and set properties of a class from within the class?(Yahoo)

使用语句:$this->propertyName,例如:

<?phpclass mycalss{ private $propertyName; public function __construct() { $this->propertyName = "value"; } } ?>
9. The code below ___________ because ____________.(腾讯)
<?php
class Foo{ ?> <?php function bar(){ print "bar"; } } ?>

A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B

10. 类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。
serialize() 和 unserialize()
11. 在 PHP 中,如果派生类与父类有相同名字的函数,则派生类的函数会替换父类的函数,程序结果为
<?php
class A{ function disName(){ echo "Picachu"; } } class B extends A{ var $tmp; function disName(){ echo "Doraemon"; } } $cartoon = New B; $cartoon->disName(); ?>

A. tmp
B. Picachu
C. disName
D. Doraemon
E. 无输出
答案:D

12. 接口和抽象类的区别是什么?

抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();

接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可以不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用 extends,子类实现接口使用 implements。

13. 类中如何定义常量、如何类中调用常量、如何在类外调用常量。

类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字 const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名

14. autoload()函数是如何运作的?

使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。

这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行 include 或者 require 来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

15. 哪种OOP设置模式能让类在整个脚本里只实例化一次?(奇矩互动)

A. MVC
B. 代理模式
C. 状态模式
D. 抽象工厂模式
E. 单件模式
答案:E

16. 借助继承,我们可以创建其他类的派生类。在PHP中,子类最多可以继承几个父类?(奇矩互动)

A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A

17. 执行以下代码,输出结果是(奇矩互动)
<?phpabstract class a{ function __construct() { echo "a"; } } $a = new a(); ?>

A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化

18. 执行以下代码,输出结果是
<?php
class a{ function __construct(){ echo "echo class a something"; } } class b extends a{ function __construct(){ echo "echo class b something"; } } $a = new b(); ?>

A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类 b 继承自类 a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用 parent::__construct()来显示调用父类构造函数。

19. 请定义一个名为MyClass的类,这个类只有一个静态方法justDoIt。(卓望)
<?php
class MyClass{ public static function justDoIt(){ } } ?>
20. 只有该类才能访问该类的私有变量吗?(卓望)

是的

21. 写出你知道的几种设计模式,并用php代码实现其中一种。(卓望)

单例模式,工厂模式
单例模式 实现代码 见 第二题

转载于:https://www.cnblogs.com/xiong63/p/6063464.html

php面向对象面试题相关推荐

  1. java面向对象笔试_Java面向对象笔试题.doc

    Java面向对象笔试题 <Java面向对象>内部测试-笔试试卷 1.下列对Java中的继承描述错误的说法是(). 子类至少有一个基类 子类可作为另一个子类的基类 子类可以通过this关键字 ...

  2. 河科大c语言题库17,河科大面向对象程序设计试题.doc

    河科大面向对象程序设计试题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该 ...

  3. 快问快答JS面向对象面试题

    1.说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量.闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露.在js中,函数即闭包,只有函数才 ...

  4. 山东大学软件学院2017-2018学年面向对象期末试题(回忆版)

    山东大学软件学院2017-2018学年面向对象开发技术期末考试试题(回忆版) (尽力用题目原话复述,但记忆的错误与偏差在所难免,见谅,欢迎指正) 一.什么是重载(overload )?什么是重写(ov ...

  5. 使用java实现面向对象编程试题答案,面试题+笔记+项目实战

    一.掀起Spring的盖头来 Spring框架的由来 Spring框架概述 二.Spring的IoC容器 重头开始认识loC的基本概念:(构造方法注入+scttcr方法注入+接口注入) 运筹帷幄的秘密 ...

  6. java页面间面向对象的方法面试题_JAVA面向对象面试题带答案(墙裂推荐)

    1) 在Java中,如果父类中的某些方法不包含任何逻辑,并且需要有子类重写,应该使用(c)关键字来申明父类的这些方法. a) Finalc b) Static c) Abstract d) Void ...

  7. 学堂在线python面向对象程序设计试题_面向对象程序设计-中国大学mooc-试题题目及答案...

    面向对象程序设计-中国大学mooc-试题题目及答案 更多相关问题 [单选题]下面属于"新现实主义"社会题材的影片有( ). A. <小偷家族> B. <偷自行车的 ...

  8. php面向对象笔试题,php练习笔试题

    php练习笔试题 引导语:PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写, 是一种 HTML 内嵌式的语言,以下是小编整理的php练习笔试题,欢迎参考阅读! 简答题 ...

  9. 《java入门第一季》之面向对象面试题(继承中构造方法的关系)

    /*继承中构造方法的关系A:子类中所有(子类的有参和无参)的构造方法(默认都会访问父类)中(空参数)的构造方法,默认访问父类空参数构造,不默认访问有参数构造B:为什么呢?因为子类会继承父类中的数据,可 ...

最新文章

  1. 简述在虚拟机中安装 centos 的过程_从零构建Fabric开发运行环境手册(一):安装OS虚拟机(CentOS)...
  2. java不同类之间参数传递_《java基础》整型包装类之间值得比较
  3. win10 uwp 打包第三方字体到应用
  4. 面试官:为什么 wait() 方法需要写在循环里?
  5. Fresco对Listview等快速滑动时停止加载
  6. Mycat监控_监控平台Mycat-web配置指标_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0038
  7. iOS 禁止横屏的解决方案
  8. OEM 11g在win7 ie11下报错“证书错误,导航已阻止”的恢复方法
  9. 一款好用的bi报表软件,让你站在Excel的肩膀上
  10. 继续逼近FLASH效果
  11. A novel hybrid intrusion detection method integrating anomalydetection with misuse detection
  12. 面试必考:在 Java 中如何利用 redis 实现一个分布式锁服务
  13. Mac如何查看隐藏文件夹|隐藏文件夹的显示与隐藏
  14. 计算机音乐数字乐谱青芒,牵丝戏 - 青芒Qimo - 5SING中国原创音乐基地
  15. 如何下载网页上网站上的视频
  16. 如何轻松打造一款智能防丢神器?让生活更省心省力
  17. 华为的android文件夹在哪,安卓手机文件目录详解
  18. 解决pyinstaller打包涉及uiautomation截图时出现的dll找不到的错误
  19. 微软允许员工永久在家办公的背后或许暗藏杀机
  20. 人到中年,30岁失业在家,创业没资金,也找不到工作,该怎么办?

热门文章

  1. 电子工程师必须知道的10个网站 !!!
  2. .NET EF框架的安装、及三种开发模式
  3. WFP在包含fwpmu.h头的时候出错
  4. Python进程、线程、协程详解
  5. c# 加密解密帮助类
  6. B - 娜娜梦游仙境系列——跳远女王
  7. Linux如何关机与关机命令祥解
  8. 【问题帖】压缩图片大小至指定Kb以下
  9. 站长如何短线操作实现盈利
  10. pthread_cond_singal condition