PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结
前 言
OOP
学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)。
| 1 PHP中的抽象类与抽象方法 |
1、什么是抽象方法?
没有方法体 {} 的方法,必须使用abstract 关键字修饰。这样的方,我们叫做抽象方法。
abstract function say(); // 抽象方法
2、什么是抽象类?
包含抽象方法的类就叫抽象类。抽象类必须使用abstract关键字修饰。
abstract class Person{}
3、抽象类的注意事项
① 抽象类可以包含非抽象方法;
② 包含抽象方法的类,一定是抽象类;
抽象类,并不一定必须包含抽象方法;
③ 抽象类,不能实例化。
(抽象类中可能包含抽象方法,抽象方法没有方法体,实例化调用没有意义。)
我们使用抽象类的目的!就是限制实例化!!!
4、 子类继承抽象类,那么子类必须重写父类的所有抽象方法。除非子类也是抽象类。
5、使用抽象类的作用?
① 限制实例化。(抽象类是一个不完整的类,里面的抽象方法没有方法体,所以不能实例化)
② 抽象类为子类的继承提供一种规范。子类继承一个抽象类,则必须包含并且实现抽象类中已定的抽象方法。
| 2 静态属性和静态方法 |
1、static
① 可以修饰属性和方法,分别称为静态属性、静态方法,也叫类属性、类方法;
② 静态属性、静态方法,只能使用类名直接调用。
使用"类名::$静态属性" 、 "类名::静态方法()"
Person::$sex; Person::say();
③ 静态属性、方法,在类装载时就会声明。先于对象产生;
④ 静态方法中,不能调用非静态属性或方法;
非静态方法,可以调用静态属性或方法;
(因为静态属性和方法在类装载时就已经产生,而非静态的属性方法、此时还没有实例化诞生)
⑤ 在类中,可以使用self关键字,代指类名。
class Person{
static $sex = "nan";
function say(){
echo self::$sex;
}
}
⑥ 静态属性是共享的。也就是new很多对象也是共用一个属性。
2、final
① final 修饰类,此类为最终类,不能被继承;
② final 修饰方法,此方法为最终方法,不能被重写!
③ final 不能修饰属性。
3、const关键字;
在类中声明常量,不能使用define()函数!必须使用const关键字。
与define()声明类似,const关键字声明常量不能带$,必须全部大写!
常量一旦声明,不能改变。调用时与static一样,使用类名帝爱用 Person::常量。
【小总结】 几种特殊操作符
1、 . 只能连接字符串; "".""
2、 => 声明数组是,关联键与值["key"=>"value"]
3、 -> 对象($this new出的对象)低啊用成员属性、成员方法。
4、 : : ① 使用parent关键字,调用父类中的同名方法;parent::say();
② 使用类名(和self)调用类中的静态属性、静态方法、以及常量。
| 3 PHP中的单利模式(单态模式) |
单利模式也叫单态模式
可以保证,一个类只能有一个对象实例。
实现要点:
① 构造函数私有化,不允许使用new关键字创建对象。
② 对外提供获取对象的方法。在方法中判断对象是否为空,如果为空则创建对象并返回,如果不为空直接放回,
③ 实例对象的属性以及过去对象的方法必须都是静态的。
④ 之后,创建对象只能使用我们提供的静态方法。 $s1 = Singleton::getSingle();
class Singleton{
private static $single=null;
private function __construct(){}
static function getSingle(){
if(!self::$single){
self::$single = new self();
}
return self::$single;
}
function __destruct(){
echo "啊,我被销毁了。";
}
}
$s1 = Singleton::getSingle();
$s2 = Singleton::getSingle();
$s3 = Singleton::getSingle();
$s4 = Singleton::getSingle();
单利模式简单的代码
| 4 串行化与反串行化(序列化与反序列化) |
1、串行化:将对象通过一系列操作,转化为一个字符串你的过程,称为串行化;
2、反串行化:将串行化后的字符串,再转为对象的过程,称为反串行化;
3、什么时候使用串行化?
① 对象需要在网络中传输的时候;
② 对象需要在文件或者数据库中持久保存的时候;
4、怎么实现对象串行化与反串行化?
串行化: $str = serialize($duixiang);
反串行化: $duixiang = unserialize($str);
5、__sleep()魔术方法:
① 当执行对象串行化的时候,会自动执行__sleep()函数;
② __sleep()函数要求返回一个数组,数组中的值,就是可以串行化的属性;不在数组中的属性,不能被串行化;
function __sleep(){
return array("name","age");//只有name/age两个属性可以串行化
}
6、__wakeup()魔术方法:
① 当反串行化对象时,自动调用__wakeup()方法;
② 自动调用时,用于给反串行化产生的新对象属性,进行重新复制;
function __wakeup(){
$this->name = "李四";
| 5 约束类型 |
1、类型约束:是指在变量前,加上数据类型,用于约束此变量只能存放对应的数据类型.(这种操作常见于强类型语言,在PHP中,只能实现数组和对象的类型约束)
2、如果类型约束为某一个类,则本类以及本类的子类对象,都可以通过;
3、在PHP中,类型约束,只能发生在函数的形参中。
class Person{}
class Student extend
function func(Person $p){
//约束函数的参数,只接受Person类及Person子类
echo "111";
echo $p->name;
}
func(new Person()); √
func(new Student()); √
func("111"); ×
形如 new Person();的形式,我们称其为“匿名函数”;
| 6 魔术方法小总结 |
1、__construct(): 构造函数,new一个对象时,自动调用
2、__destruct(): 析构函数,当一个对象被销毁前,自动调用
3、__get():访问类中私有属性时,自动调用。传递读取的属性名,返回$this->属性名
4、__set():给类的私有属性赋值时,自动调用。传递需要设置的属性名和属性值
5、__isset():使用isset()检测对象私有属性时,自动调用。传递检测的属性名,返回isset($this->属性名);
6、__unset():使用unset()删除对象私有属性时,自动调用。传递删除的属性名,方法中执行unset($this->属性名);
7、__toString():使用echo打印对象时,自动调用。返回想要打印对象时,现实内容;返回必须是字符串;
8、__call():调用一个类中未定义或未公开的方法时,自动调用。传递被调用的函数名,和参数列表数组;
9、__clone():当使用clone关键字,克隆一个对象时,自动调用。作用是为新克隆的对象进行初始化复制;
10、__sleep():对象序列化时,自动调用。返回一个数组,数组中的值就是可以序列化的属性。
11、__wakeup():对象反系列化时,自动调用。为反序列化新产生的对象,进行初始化复制;
12、__autoload():需要在类外部声明函数。当实例化一个为生命的类时,自动调用。传递实例化的类名,可以使用类名自动加载对应的类文件。
学习时候的笔记,可能会有一些错误的地方,欢迎各位的批评指点。
反思,复盘,每天收获一点---------------------期待更好的自己
PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结的更多相关文章
- php面向对象中static静态属性和静态方法的调用
这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态 ...
- java中的抽象类和抽象方法
知识点:java中的抽象类和抽象方法 关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法 抽象类一般在多态的场景中使用 一:抽象类(abstract class) 在类的 ...
- PHP static静态属性和静态方法
这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...
- php静态属性和静态方法
php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. · ...
- static静态属性和静态方法的原理与调用技巧
这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属 ...
- java之静态属性和静态方法
前言 静态属性和方法必须用static修饰符 静态属性和非静态属性的区别: 1.在内存中存放位置不同 所有带static修饰符的属性或者方法都存放在内存中的方法区 而非静态属性存放在内存中的堆区 ...
- PHP使用static关键字声明静态属性和静态方法
PHP使用static关键字声明静态属性和静态方法 在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法. 静态属性和静态方法不需要在被类实例化的情况下就可以直接使用. ...
- ES6——静态属性与静态方法
静态方法只能写在class内,constructor外.通过static关键字声明 静态属性只能写在class外,通过 类名.属性名 = 属性值 声明 //静态属性与静态方法(ES6明确规定,Clas ...
- C#中的抽象类、抽象方法和虚方法
[抽象类]abstract 修饰符可与类和方法一起使用定义抽象类的目的是提供可由其子类共享的一般形式.子类可以根据自身需要扩展抽象类.抽象类不能实例化.抽象方法没有函数体.抽象方法必须在子类中给出具体 ...
随机推荐
- react+redux+generation-modation脚手架添加一个todolist
当我遇到问题: 要沉着冷静. 要管理好时间. 别被bug或error搞的不高兴,要高兴,又有煅炼思维的机会了. 要思考这是为什么? 要搞清楚问题的本质. 要探究问题,探究数据的流动. TodoList ...
- hibernate 使用 hibernate tool 生成配置文件和实体类
安装Hibernate插件 下载所需的Hibernatetools http://www.hibernate.org/6.html 将下载得到的文件解压得到的features和plugins文件夹, ...
- webpack中dev-server不写contentBase时如何设置可以显示页面并且加载js
今天学习了dev-server这个配置,中间遇到疑惑,我写了contentBase是可以走通,可以再localhost:8080看到页面并且正确加载bundle.js的,但是这个contentBase ...
- 基于jqUI的日期选择(‘yy-mm-dd’)
今天看某公司的网页,其中有个筛选条件是选择一个时间区间,从而选择出符合条件的项.什么也不说了,先看图左边的输入框,点击具体的日期,这里我选择的是2017-3-9,然后右边的输入框就只能选择这个日期以后 ...
- python 小程序—三级菜单—循环和字典练习
程序中利用多级字典来存储三级菜单, 通过一系列while循环和for循环,实现了三级菜单的查询,选择,退回上级菜单,退出程序几个功能. 缺点:程序语句过于重复,效率低. #-*-coding:utf- ...
- 【WPF】获取电磁笔的压感
WPF 不仅支持触控,也支持笔的输入,比如现在比较高大上的电磁笔.便宜的板子一般不配备电磁笔,而是配电容笔,虽然也号称XXX级压感,但是效果自然不可与电磁笔相比. UIElement 类规范了UI元素 ...
- Power Pivot表属性无法切换回表预览模式的问题
近期Office365用户升级后解决了在Power Pivot中输入中文的问题,但是同时也带来了一个新的问题就是表属性窗口默认为“查询编辑器”模式,且无法切换回“表预览”模式. 本文和您分享在这种情况 ...
- 高性能mysql(二)——mysql的存储引擎
在文件系统中,mysql将每个数据库保存为数据目录下的一个子目录.创建表时,mysql会在子目录下创建一个和表同名的.frm文件保存表的定义.例如创建一个名为mytable的表,mysql会在myta ...
- Windows 自动获取IP脚本
@echo off echo 正在自动获取IP地址.... set 连接名称=以太网 netsh interface ip set address name = "%连接名称%" ...
- One day one cf,Keep Wa away from me.
Codeforces Round #379 (Div. 2) A水,算字符个数 B水,贪心优先组成后者 C贪心尺取,以消耗排序change那个,然后贪心另一个 D对角线就是x0+y0 == x1+y1 ...