本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,若有侵权请联系我进行删除,email:guoyugygy@163.com
在上一篇博文中,冷月为你们分享了会话控制的考点,其中 Cookie 和 Session 是其中的重点,对于客户端和服务端中的会话管理,各位小伙伴必定要勤加练习。今天,冷月为你们分享面向对象考点。php
请写出 PHP 类权限控制修饰符
答案:面试
public:公有类型设计模式
在类、子类、外部均可以访问微信
protected:受保护类型数据结构
在类、子类能够访问函数
private:私有类型学习
只要在子类能够访问this
本考点主要是考察php中类中的权限控制修饰符,已经面向对象的特性、魔术方法、设计模式等考点设计
面向对象内容code
继承
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,能够在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容做为本身的内容,并加入若干新的内容。
在php中类是单一继承,即一个类只能继承一个父类。
方法重写
子类在继承了父类后,能够重写父类的方法,即写一个与父类重名的方法将其覆盖。final修饰的类方法不可被子类重写。也可使用parent::方法名()
来调用父类的方法。
<?php /** * Created by 冷月小白. * 微信公众号: 学长冷月 */ class Dog { public function name() { echo "i am a dog"; } } class XiaoHuang extends Dog { public function name() { echo "i am xiaohuang"; } } $xiaohuang = new XiaoHuang(); $xiaohuang->name(); //输出 "i am xiaohuang"
封装
封装是指将现实世界中存在的某个客体的属性与行为绑定在一块儿,并放置在一个逻辑单元内。
多态
多态性是指相同的函数或方法可做用于多种类型的对象上并得到不一样的结果。不一样的对象,收到同一消息能够产生不一样的结果,这种现象称为多态性。
抽象类的定义
任何一个类,若是它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
继承一个抽象类的时候,子类必须定义父类中的全部抽象方法;另外,这些方法的访问控制必须和父类中同样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
<?php /** * Created by 冷月小白. * 微信公众号: 学长冷月 */ abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') . PHP_EOL; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') . PHP_EOL; ?>
接口的定义
使用接口(interface),能够指定某个类必须实现哪些方法,但不须要定义这些方法的具体内容。
接口是经过 interface 关键字来定义的,就像定义一个标准的类同样,但其中定义全部的方法都是空的。
接口中定义的全部方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操做符。类中必须实现接口中定义的全部方法,不然会报一个致命错误。类能够实现多个接口,用逗号来分隔多个接口的名称。
<?php /** * Created by 冷月小白. * 微信公众号: 学长冷月 */ // 声明一个'iTemplate'接口 interface Name { public function setName($name,$value); public function getName($name); } // 实现接口 class myName implements Name { private $vars = array(); public function setName($name, $var) { $this->vars[$name] = $var; } public function getName($name) { return $this->vars[$name]; } } $my = new myName(); $my -> setName('a','b'); echo $my -> getName('a'); //b
魔术方法
__construct() 函数
构造函数,在实例化类的时候自动执行
__destruct()函数
析构函数,析构函数会在到某个对象的全部引用都被删除或者当对象被显式销毁时执行。
__call()函数
在对象中调用一个不可访问方法时,__call() 会被调用。
__callStatic()函数
在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。
__get()
读取不可访问属性的值时,__get() 会被调用。
__set()
在给不可访问属性赋值时,__set() 会被调用。
__isset()
当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
__usset()
当对不可访问属性调用 unset() 时,__unset() 会被调用。
__sleep()
serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。若是存在,则该方法会优先被调用,而后才执行序列化操做。
__wakeup()
unserialize()会检查是否存在一个__wakeup方法。若是存在,则会先调用 __wakeup方法,预先准备对象数据。
__toString()
__toString() 的具体用途是当一个对象被看成字符串对待的时候,会触发这个魔术方法。
__clone()
当对象被clone时,会触发这个方法
设计模式
工厂模式
单例模式
注册树模式
设配器模式
观察者模式
策略模式
请写出PHP的构造函数和析构函数
答案
<?php /** * Created by 冷月小白. * 微信公众号: 学长冷月 */ class A { public function __construct() //实例化时触发 { echo "我被实例化拉"; } public function __destruct() //对象被销毁时触发 { echo "我被撤销啦"; } }
若是这篇博文有帮助到您,能够帮冷月点一个赞或者加一个关注哦!
欢迎关注个人公众号:学长冷月,得到独家整理的学习资源和平常干货推送。
若是您对个人专题内容感兴趣,也能够关注个人博客: guoyu7.com
若是这篇博文有帮助到您,能够帮冷月点一个赞或者加一个关注哦!
欢迎关注个人公众号:学长冷月,得到独家整理的学习资源和平常干货推送。
若是您对个人专题内容感兴趣,也能够关注个人博客: guoyu7.com