面试 面向对象php,php面试笔记(9)-php基础知识-面向对象考点
在上一篇博文中,冷月为大家分享了会话控制的考点,其中 Cookie 和 Session 是其中的重点,对于客户端和服务端中的会话管理,各位小伙伴一定要勤加练习。今天,冷月为大家分享面向对象考点。
回顾真题
请写出 PHP 类权限控制修饰符
答案:
public:公有类型
在类、子类、外部都可以访问
protected:受保护类型
在类、子类可以访问
private:私有类型
只要在子类可以访问
考点分析
本考点主要是考察php中类中的权限控制修饰符,已经面向对象的特性、魔术方法、设计模式等考点
面向对象内容
继承
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
在php中类是单一继承,即一个类只能继承一个父类。
方法重写
子类在继承了父类后,可以重写父类的方法,即写一个与父类重名的方法将其覆盖。final修饰的类方法不可被子类重写。也可以使用parent::方法名()来调用父类的方法。
/**
* 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"
封装
封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
多态
多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
抽象类的定义
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
/**
* 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 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
/**
* 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的构造函数和析构函数
答案
/**
* Created by 冷月小白.
* 微信公众号: 学长冷月
*/
class A
{
public function __construct() //实例化时触发
{
echo "我被实例化拉";
}
public function __destruct() //对象被销毁时触发
{
echo "我被撤销啦";
}
}
如果这篇博文有帮助到您,可以帮冷月点一个赞或者加一个关注哦!
欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。 如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com 如果这篇博文有帮助到您,可以帮冷月点一个赞或者加一个关注哦! 欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。 如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com
面试 面向对象php,php面试笔记(9)-php基础知识-面向对象考点相关推荐
- 《Java并发编程实践》学习笔记之一:基础知识
<Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念: (2)进程:是一种活动,它是由一个动作序列组成 ...
- 前端学习笔记(js基础知识)
前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...
- 【基础篇】C#基础知识——面向对象
[基础篇]C#基础知识--面向对象 第一章 C#基础知识--入门 第二章 C#基础知识--面向对象 文章目录 [基础篇]C#基础知识--面向对象 前言 一.C#面向对象的特性 二.命名空间 2.1 n ...
- LTE-V2X笔记:一些基础知识
原文转载地址:LTE-V2X笔记:一些基础知识 (1)LTE-V2X技术 频段:5905~5925MHZ(试验频段) 调制方式:QPSK 正交相移键控 功率:23dBm (2)LTE-V2X通信模式 ...
- 面试官,你考我那么多基础知识干什么?
本文转载自公众号 大飞码字 经常有同学跟我说,很多的基础知识学过就忘, 比如操作系统.数据库.网络协议等方面的底层原理.而这些往往都是技术面试必考的内容. 每次被问到这个,我都不知怎么回答,跟他说多 ...
- 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化
引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...
- 【C++后台开发面经】面试总结第三波:针对后台开发相关基础知识分类总结
前言 面试总结第三波,关于后台开发面试相关基础知识,数据结构.算法.linux操作系统.计算机网络.C++.数据库进行分类总结. 后端面试总结 目录 后端面试总结 1.数据结构 链表和数组的区别 树的 ...
- JAVA学习笔记(1)【基础知识】
JAVA学习笔记DAY_1 提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正! 文章目录 JAVA学习笔记DAY_1 前言 一.Java语言未来的 ...
- 一个类可以实现多个接口吗_Java入门:基础知识(面向对象:接口)
接着上一篇的基础知识,今天俺们来学习一下: 面向对象 (万物皆对象) 三大特征(封装.继承.多态) 接口 接口 概述:接口是一种引用数据类型,是方法的'集合',接口的内部主要是定义方法,包含常量.抽象 ...
- 【学习笔记】网络安全基础知识总结
网络安全基础知识总结 前言 一.网络安全概述 1.1 引言 1.2 密码学的发展 1.3 密码学基础 1.4 对称密码 1.4.1 数据加密标准DES 二.数论知识 2.1 数论基础 2.2 有限域 ...
最新文章
- SpringBoot实现万能文件在线预览,已开源,真香!!!
- import export php,import与export在node.js中的使用方法
- linux中awk工具的使用(转载)
- SpringBoot 小技巧
- 计算机视觉(一)——深度学习
- 利用3D转换实现旋转木马
- 华为metebook电脑如何修改应用商店中新应用的默认安装路径
- DNS:解析域资源记录(A, AAAA, PTR, SOA, NS, CNAME, MX)
- 中文ssid linux,分享|LinSSID:一款Linux下的图形化Wi-Fi扫描器
- php中判断一个文件是否存在,PHP中用于判断文件是否存在的函数是
- Laya2自动同步cullingMask方案以及灯光裁剪补丁
- 免费GPU汇总及选购
- 饿了么-T技术沙龙活动感悟。
- 12Cr1MoVR是什么材质12Cr1MoVR钢板简介12Cr1MoVR化学成分钢板应用
- 中日韩文字Unicode表
- 欧美slots游戏 源码(完整)
- 10个超棒的界面设计工具
- Serv-u + 花生壳实现FTP内网穿透
- 多智能体强化学习(三)单智能体强化学习
- OpenGl太阳地球月亮运动系统
热门文章
- 计算机开机错误0xc0000428,win7系统电脑开机出现0xc0000428错误提示的解决方法
- 勿忘初心,保持饥渴的心态
- 【内核调度、负载计算】【update_curr】
- c语言自学教材 轮子,七月新增开源项目:你学习的速度跟得上前端造轮子的速度吗?...
- UE4角色控制权获取
- 提高文件共享服务器速度,通过云服务器共享以优化网站速度并提高转换率
- mac 大型垃圾手动清理 无需安装软件
- iOS 蓝牙 4.0 开发
- 数字签名、数字证书与CA
- 达内科技NTD1712 cisco远程控制路由,交换。