PHP 的oop思想
优点:
1.方便代码维护,更人性化
2.方便代码扩展
3.
语法:
class 类名
{
修饰词 属性名;
修饰词 function 方法名("参数"(看情况而定可以不用传参))
{
内容;
}
}
//实例化类
$object = new 类名;
$object->方法名("参数"(看你封装的方法是否有传参));
关键字:
final:子类无法重写被修饰的方法;
static:静态;被它修饰的属性可以直接使用,不用实例化类,eg:$user=Person::$name;(类中有一个static $name='张三';)有两种调用方式1."::",2."self"
__get():获取属性值;
__set():给属性赋值;
TYPE_CREDITCARD:常量,一旦定义之后值不会再改变;
extends:继承,子类可以直接使用父类的方法,优先级,子类高于父类,如果子类和父类的方法名相同,引用类的属性的时候回返回子类的属性值,方法也是
parent::父类被重写的方法,不能用"父类类名::被重写的方法";
self::method("方法名")();调用的是子类的方法();
interface:接口
implements 接口名,接口名...;实现继承多个接口
语法:
interface 名称
{
function 方法名();
}
注意:这里没有属性和方法体
trait : 可以将多个类中,共用的一些属性和方法提取出来做来公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入就可以了,相当于把trait中的代码复制到当前类中.
因为trait不是类,所以不能有静态成员,类常量,当然也不可能被实例化。其实一个类中的代码,可以分为二大部分:一是我们自己写的代码,暂且叫私有代码吧,还有一部分就是公共代码了,
之前主要是由父类代码组成。现在你的类中的公共代码又多一个新成员:trait类代码。如果说:继承可以纵向扩展一个类,那么trait就是横向扩展一个类功能
eg:
<?php
trait Test1 {
public $name = 'PHP中文网'; //trait类中可以用属性
public function hello1() //trait类中主要成员是方法
{ return 'Test1::hello1()'; } } //2.创建triat类
Test2 trait Test2 { function hello2() { return 'Test2::hello2()'; } } //3.创建Demo1类
class Demo1 { use Test1, Test2; } //进行测试 $obj = new Demo1; echo $obj->hello1(); //访问trait类Test1中的
hello1() echo '<hr>'; echo $obj->name; //访问ttrait类
Test1中的$name属性 echo '<hr>'; echo $obj->hello2(); //访问ttrait类
Test1中的hello2()
注意:1.一个类中如果使用了多个trait回发生致命错误
2.一个类中使用两个不同的trait中相同方法需要用as解决冲突
抽象类:
abstract关键字修饰,父类的抽象方法是只有方法名,没有方法体,子类必须实现父类抽象方法
注意:1.抽象方法只能在抽象类中,所以只有一个类中存在一个抽象方法就必须定义成抽象类
2.抽象类不能直接实例化
构造函数:
__construct:初始化类属性的特殊函数
子类继承父类不会调用父类构造函数,需要在子类中显示调用:语法:父类名::__cunstruct();
析构函数:
__destruct():会在程序执行结束后调用
类检查:class_exists();
检查类是否在数组中:get_declared_classes()
得到类中属性和方法:get_calss_methods和get_class_vars
得到父类名称:get_parent_class()
判断方法是否存在:method_exists();
序列化:将一个对象转换成字节流,这样就可以将对象保存在文件中,这对于数据的持久化很有用
serialize():产生一个可存储的值的表示
注解:
返回字符串,此字符串包含了表示 value
的字节流,可以存储于任何地方。
这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。
想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。
当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。
unserialize()
__sleep()在一个对象被序列化之前被调用,它能执行清理一些必要的清理工作,保持对象的状态
转载于:https://www.cnblogs.com/yinyusoso/p/8796171.html
PHP 的oop思想相关推荐
- java中oops是什么意思_什么是oop思想_什么是OOPS
什么是oop思想 OOPS is a programming approach which provides solution to real life problems with the help ...
- 三分钟了解Java OOP思想
Java OOP 思想深度刨析 Java面向对象编程 面向对象编程简称OOP(Object--对象.Oriendted--导向的.Programming--程序设计) 面向对象通俗来讲,就是指使用丰富 ...
- OOD知识---对OOA\OOD\OOP思想
面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节.其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受. ...
- Java基础 - 1 OOP思想
(Object-Oriented Programming,OOP)//(面向对象编程,OOP) OOP是一种编程思想,OOP的基本原则是组合,由单个能够起到子程序作用的单元或对象组合而成,即面向对象编 ...
- Java面向对象编程的程序设计(OOP)思想
文章目录 面向对象(oop) 封装 继承 多态 抽象类(abstract) 类型转化(instanceof) static关键字 面向对象(oop) 面向对象程序设计(Object Oriented ...
- 冒号课堂 编程范式与OOP思想
上篇:编程范式与编程语言 第1课 开班导言 第2课 重要范式 第3课 常用范式 第4课 重温范式 第5课 语言小谈 第6课 语言简评 下篇:抽象机制与对象范式 第7课 抽象封装 第8课 抽象接口 第9 ...
- C++新手,用OOP思想编写的推箱子小游戏,请多赐教
1.main函数 #include"Controller.h" void main() { CController controller; controller.Init(); ...
- 使用OOP思想二次封装echarts
最近公司写几个报表模块,抽出空余时间简单的封装了一下.对原始的echarts进行二次封装.更方便维护.创建.管理: 源码地址 效果 1.文件目录说明 |-- echarts-extends|-- in ...
- 计算机编程oop思想与老子道德经之无有万物
我们用虚拟的数字计算机来模拟宇宙万物的运行规律. 道,乃电子计算机之设计,之CPU,GPU,Registers,乃操作系统,这些都叫"无". 源代码,是为"有" ...
- OOP 思想在 TCC/APIX/GORM 源码中的应用
动手点关注 干货不迷路
最新文章
- 分享 14 个 Spring MVC 顶级技巧!
- luogu P3786 萃香抱西瓜
- HDU2608 0 or 1
- 4 关卡流 进阶_全息武器全解析,记住4个点全区第一就是你!
- 这种玩法闻所未闻,利用python编程自定义QQ的在线状态
- 使用keytool生成密钥对
- java完整JDBC操作数据库
- Atitit 工具选型的因素与方法 attilax总结
- Android MTK TP Driver 触屏驱动
- win7和手机共享文件和上网
- 毫米波雷达测距/测速原理介绍_小七自学笔记
- 这次跟大家聊聊技术,也聊聊人生
- 第一篇:零基础入门金融风控之风控指标体系清单
- 提高 Python 代码可读性的 5 个基本技巧
- asp毕业设计——基于asp+access的学生排课管理系统设计与实现(毕业论文+程序源码)——学生排课管理系统
- 怎么在手机上做文字长图?云便签可将文字生成长图并分享
- Win10C盘满了怎么清理?如何清理电脑C盘?
- iOS_Tagged Pointer是什么,结构
- 【登录及鉴权】-盘点那些主流的开源登录及权限认证框架 (上)
- python解析xml生成代码_python:有没有实现为生成器的XML解析器?
热门文章
- 软件工程——软件开发步骤
- android自动适应横屏,Android屏幕适配(一)--自定义View屏幕适配
- react + better-scroll 横向滚动案例
- matlab 指定ccs编译器,在CCS5.5中导入CCS3.3工程——指定编译器和修改prj文件
- PS--解决文字不清晰问题
- php文字下划线,如何在文字下面添加下划线
- ppt太大怎么变小,ppt如何压缩变小
- selenium chromedriver 无头浏览器检测
- [转]如何在NIOS II中读写EPCS剩余空间
- java byte 文件大小_java byte文件大小