【php】面向对象(三)
知识点关键词:FSCICATS
一、 f => final:
a) 是一个修饰符,用来修饰类和成员方法
b) 使用final修饰符修饰的类不能被继承,使用final修饰符修饰的成员方法,不能被重写;
c) 好比是专利、知识产权
二、 S => static:
a) 是一个修饰符,用来修饰成员属性和成员方法
b) 修饰成员属性:
i. 使用的方法:static修饰符可以配合PPP修饰符进行修饰成员属性修饰
1. Public static $name;
ii. 作用:其实就是将使用静态修饰符修饰的成员属性变为共有存在的属性
iii. 访问形式:
1. 在类的内部:self::属性名;
2. 在类的外部:类名::属性名;
c) 修饰成员方法:
i. 使用的方法:static修饰符可以配合PPP修饰符进行成员方法修饰
1. Public static function sing();
ii. 注意事项:被static修饰符所修饰的成员方法,只能操作静态成员属性,和静态成员方法,也就是说在静态成员方法中不能有$this
iii. 访问形式:
1. 在类的内部:self::方法名();
2. 在类的外部:类名::方法名();
三、 单例模式:
a) 目标:想在脚本当中只实例化一次该对象\
b) 步骤:
i. 将构造方法私有化
ii. 定义判断是否为第一次实例化的一个静态成员属性,用于存放实例化的对象的
iii. 定义静态成员方法,将实例化结果返回到调用出
//单例模式
class Obj{
//定义静态成员属性
public static $o = null; //构造方法私有化
private function __construct(){ } //在类的内部去实例化本对象
public static function getObj(){
if(self::$o==null){
self::$o = new Obj();
}
return self::$o;
} } $a = Obj::getObj();
$b = Obj::getObj();
$c = Obj::getObj();
ar_dump($a); //D:\wamp\www\lamp183\lesson30_oop3\5.php:25:
object(Obj)[1]
var_dump($b); //D:\wamp\www\lamp183\lesson30_oop3\5.php:25:
object(Obj)[1]
var_dump($c); //D:\wamp\www\lamp183\lesson30_oop3\5.php:25:
object(Obj)[1]
四、 C => const
a) 这是一个关键字
b) 作用:用来定义一个常量
c) 格式:const 常量名 = 常量值;
d) 注意:
i. Define可以在流程控制当中定义
ii. Const不可以在流程控制当中定义
iii. 常量可能的值:四种标量类型的值+null空型
e) 类常量的访问方式:
i. 在类的内部:self::常量名
ii. 在类的外部:类名::常量名
五、 I => instanceof
a) 是一个运算符
b) 作用:用来判断一个对象是否属于该类或父类
c) 格式:对象 instanceof 类名; 如果为真说明该对象属于该类,否则不属于
d) 滴血认亲
class GrandPa{ } class Father extends GrandPa{ } class Son extends Father{ } class Gebi{ } //实例化一个儿子类
$me = new Son(); //查看对象是否是由Son类实例化的
var_dump($me instanceof Son); //D:\wamp\www\lamp183\lesson30_oop3\7.php:24:boolean true
var_dump($me instanceof Father); //D:\wamp\www\lamp183\lesson30_oop3\7.php:25:boolean true
var_dump($me instanceof GrandPa); //D:\wamp\www\lamp183\lesson30_oop3\7.php:26:boolean true
var_dump($me instanceof Gebi); //D:\wamp\www\lamp183\lesson30_oop3\7.php:27:boolean false
六、 C => clone
a) 是一个关键字,可以将一个对象克隆出另一份
b) 格式:$a = clone $b;
c) 魔术方法:__clone
i. 自动执行场景:当我们对一个对象进行克隆的时候,会自动调用该方法
d) 作用:为了初始化当前新创建出来的对象的信息
class Twins{ //成员属性
public $name;
public $age; //构造方法
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
} //成员方法
public function dance(){
echo '我正在跳舞中,么么哒……';
} //当我们对一个对象进行克隆的时候,会自动调用的一个方法
public function __clone(){
$this->name = 'Mandy';
$this->age = 15;
} } $sandy = new Twins('sandy',15);
$mandy = clone $sandy; //执行了一个克隆 var_dump($sandy);
//结果
object(Twins)[1]
public 'name' => string 'sandy' (length=5)
public 'age' => int 15 var_dump($mandy);
//结果
object(Twins)[2]
public 'name' => string 'Mandy' (length=5)
public 'age' => int 15
七、 A => __autoload
a) 这是一个魔术函数
b) 触发场景:当我们实例化一个不存在的类的时候,或者继承一个不存在的类的时候,会自动调用
c) Spl_autoload_register:可以对__autoload函数进行重命名,重命名之后,则必须使用新名进行操作
// 魔术函数__autoload,在实例化或继承一个不存在的类时,自动调用
function __autoload($name){
if(file_exists('./Libs/'.$name.'.class.php')){
include './Libs/'.$name.'.class.php';
}elseif(file_exists('./Class/'.$name.'.class.php')){
include './Class/'.$name.'.class.php';
}
} // 将类文件引入
include './Libs/upload.class.php';
include './Libs/model.class.php'; // 实例化不存在的类时
$a = new User();
var_dump($a);
//结果
object(User)[1]
八、 T => __toString
a) 是一个魔术方法
b) 触发场景:当我们对一个对象进行字符串操作的时候会自动进行调用
c) 作用:代替对象进行字符串输出
d) 注意:必须返回一个字符串类型的值
//定义一个
class SuperMan{ //成员属性
public $name;
public $age;
public $tall; //成员方法
public function __construct($name,$age,$tall){
$this->name = $name;
$this->age = $age;
$this->tall = $tall;
} public function fly(){
echo '我正在飞……带你装X带你飞,带你飞进垃圾堆……';
} //当我们使用echo对对象进行输出时,会自动调用
public function __tostring(){
return '我是超人,我怕谁!!';
} } $kent = new SuperMan('肯特',45,'185cm'); echo $kent; //我是超人,我怕谁!!
九、 S => serialize(串行化、序列化)
a) 是一个函数
b) 它能够将一个数组或一个对象变成字符串
c) 将数组转换成字符串
i. a:4:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";i:3;s:5:"xigua";}
1. a:变量的数据类型 a => array
2. 4:数组中的单元格数 有4个单元、有4个元素
3. I:数组中第一个元素的下标类型 I => int
4. 0 :下标的值
5. S : 数组中第一个元素的值的类型 s => string
6. 5 :数组中第一个元素的值的长度 单位:字节
7. Apple:值的内容
d) 将对象转换成字符串:
i. O:8:"SuperMan":3:{s:4:"name";s:6:"海波";s:3:"age";i:18;s:4:"tall";s:5:"180cm";}
1. O :变量的数据类型 o=>object
2. 8:类名的成都(字节)
3. SuperMan:类名
4. 3:类当中有3个属性
5. S:第一个属性的类型 s => string
6. 4:属性名的长度(字节)
7. Name:属性名
8. S:属性对应的值的类型 s => string
9. 6:属性值的长度(字节)
10. 海波:属性值的内容
e) 魔术方法:__sleep
i. 自动执行场景:当我们对一个对象进行串行化的时候,会自动调用
ii. 作用:可以方便我们对串行化数据的一个筛选
iii. 注意:该方法返回的必须是一个数组
十、 U => unserialize(反串行化、反序列化)
a) 这是一个函数
b) 作用:可以将串行化的数据反串行化成数组或对象
c) 魔术方法:__wakeup
i. 自动执行场景:当我们对一个对象进行反串行化的时候,会自动调用
ii. 作用:可以方便我们修改对象的成员属性的内容
//定义了一个类
class SuperMan{ //成员属性
public $name;
public $age;
public $tall; //成员方法
public function __construct($name,$age,$tall){
$this->name = $name;
$this->age = $age;
$this->tall = $tall;
} //__sleep魔术方法
public function __sleep(){
return array('name','tall');
} //__wakeup魔术方法
public function __wakeup(){
$this->name = '仉浩焱';
$this->age = 50;
$this->tall = '140cm';
}
} //实例化对象
$haibo = new SuperMan('许超',18,'160cm'); //将对象串行化
$contents = serialize($haibo);
var_dump($contents);
//结果
string 'O:8:"SuperMan":2:{s:4:"name";s:6:"许超";s:4:"tall";s:5:"160cm";}' //反串行化:
$jiji = unserialize($contents);
var_dump($jiji);
//结果
object(SuperMan)[2]
public 'name' => string '仉浩焱' (length=9)
public 'age' => int 50
public 'tall' => string '140cm' (length=5)
【php】面向对象(三)的更多相关文章
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Python面向对象三要素-封装(Encapsulation)
Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...
- JavaScript 面向对象(三) —— 高级篇
JavaScript 面向对象(一) —— 基础篇 JavaScript 面向对象(二) —— 案例篇 一.json方式的面向对象 首先要知道,js中出现的东西都能够放到json中.关于json数据格 ...
- JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式
前 言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...
- Python之面向对象三
面向对象的三大特性: 多态 多态指的是一类事物有多种形态.Python3天生支持多态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCM ...
- Python面向对象(三)
一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上 ...
- Python面向对象三要素-多态
Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...
- javascript面向对象(三):非构造函数的继承
本文来自阮一峰 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承" ...
- Objective-C面向对象(三)
1.类的继承 OC的继承是单继承,每个子类只有一个直接父类 1.1 继承的特点 OC继承的语法 @interface SubClass :SuperClass { //成员变量定义 } //方法定义部 ...
- Java学习笔记10(面向对象三:接口)
接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...
随机推荐
- 【10】openlayers 视图view
创建地图: //View对象代表地图的简单2D视图 //创建view let view = new ol.View({ center:[109,34],//视图的初始中心 maxZoom:18,//最 ...
- Go语言转义字符
\a 匹配响铃符 (相当于 \x07) 注意:正则表达式中不能使用 \b 匹配退格符,因为 \b 被用来匹配单词边界, 可以使用 \x08 表示退格符. \f 匹配换页符 (相当于 \x0C) \t ...
- JAVAEE学习day03,基本的流程控制
有问题请留言 1.流程控制语句分类 1)顺序控制语句 2)选择结构语句 if... if...else... if...else if... else... for... switch... whil ...
- node 微信支付
基于node 实现微信支付功能 需要了解的网站:微信支付 流程图: 1. 1.我的路由: const Koa = require('koa') const app = new Koa() const ...
- 基于 HTML5 WebGL 的发动机 3D 可视化系统
前言 工业机械产品大多体积庞大.运输成本高,在参加行业展会或向海外客户销售时,如果没有实物展示,仅凭静态.简单的图片说明书介绍,无法让客户全面了解产品,不仅工作人员制作麻烦,客户看得也费力.如 ...
- npm 安装 electron 出现的奇葩错误
起因 使用yarn安装electron有时稳定,在搭配别的框架时有时又出现无解的错误了,于是打开electron官网,发现: emm,似乎官方对npm情有独钟.于是我遵从官方旨意使用npm安装elec ...
- 2020kali浏览器汉化等配置
0.修改搜索引擎 1. 2. 3.点击左侧搜索,输入language因为我已经修改为中文所以没有查询到结果 4点击搜索更多语言(未汉化未英文)找到chinese后添加 5.要将chinese上移到第一 ...
- 洛谷1074 靶状数独dfs 排序、记录、搜索
题目网址:https://www.luogu.com.cn/problem/P1074 大意就是在一个9*9的数独中填数,要求行列宫都是九个互不相同的数字,给定一定的得分机制,要求求解最大得分.思路大 ...
- 如何使用WordPress搭建网站
1.空间的申请 阿里用户可以申请[阿里共享虚拟主机普惠版6元/年],虽然配置和空间不高,但也可以做个小站点的.当不满足当前配置的时候,随时可以进行升级,所以拿来练手还是比较合适的. 2.WordP ...
- 基于 HTML5 WebGL 的故宫人流量动态监控系统
前言 在当代社会,故宫已经成为一个具有多元意义的文化符号,在历史.艺术.文化等不同领域发挥着重要的作用,在国际上也成为能够代表中国文化甚至中国形象的国际符号.近几年故宫的观众接待量逐年递增,年接待量已 ...