【面试题】面向对象部分

1、什么是面向对象?主要特征是什么?几大原则是什么?

  • 面向对象是程序的一种设计模式,它利于提高程序的重用性,使程序机构更加清晰。

  • 主要特征是:封装、继承、多态。

  • 五大基本原则: 单一职责原则;开放封闭原则;替换原则; 依赖原则; 接口分离原则。

2、简述 private、 protected、 public修饰符的访问权限。

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

3、构造函数和析构函数(construct , destruct)

构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。

析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。

4、谈谈mvc的认识

由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图

Mvc优点:

低耦合性
高重用性和可使用行
较低的生命周期成本
快速的部署
可维护性

5、如何重载父类的方法

重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也就是方法的重写。
覆盖父类的方法的关键是在子类中创建与父类中相同的方法包括方法的名称、参数、返回值类型。PHP 中只要求方法名相同即可。

6、PHP 常用的魔术方法

__construct() 实例化类是自动调用
__destruct() 类对象使用结束后自动调用
__set() 在给未定义的属性赋值时调用
__get() 调用未定义的属性时候调用
__isset() 使用 isset() 和 empty() 时调用
__unset() 使用 unset() 时调用
__sleep() 使用 serialize 序列化时调用
__wakeup() 使用 unserialize 反序列化时调用
__call() 调用一个不存在的方法时调用
__callStatic() 调用一个不存在的静态方法时调用
__toString() 把对象转换成字符串时调用
__invoke() 当尝试把对象当方法调用时调用
__set_state() 当使用 var_export() 函数时调用,接受一个数组参数
__clone() 当使用 clone 复制一个对象时调用

7、$this和self、parent这三个关键词分别代表什么?

$this 当前对象    $this->name
self 当前类    self::
parent 当前类的父类

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

例如:const PI = 3.1415326;

即:类名 :: 类常量名;

9、静态变量与非静态变量的区别如下:

1.内存分配

静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
而非静态变量需要被实例化后才会分配内存。

2.生存周期

静态变量生存周期为应用程序的存在周期;
非静态变量的存在周期取决于实例化的类的存在周期。

3.调用方式

静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。

4.共享方式

静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
非静态变量是局部变量,不共享的。

5.访问方式

静态成员不能访问非静态成员;
非静态成员可以访问静态成员。

10、__autoload()方法的工作原理是什么?

使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数可以不必要写很多个include或者require函数。

猜你喜欢

转载自blog.csdn.net/only_lamp/article/details/80077227