PHP面向对象01:面向对象基础
PHP面向对象01:面向对象基础
- 一、关键字说明
- 二、技术实现
- 1. 定义类
- 2. 类成员
- 三、 访问修饰限定符
- 1. public
- 2. protected
- 3. private
- 4. 空修饰限定符
- 四、类内部对象
- 五、构造和析构
- 1. 构造方法
- 2. 析构方法
- 六、范围解析操作符
- 1. 访问类常量
- 2. 静态成员
- 3. self关键字
- 七、类的加载
- 1. 手动加载
- 2. 自动加载
- 八、对象克隆
一、关键字说明
- class:类。
- object:对象,也称实例。
- new:实例化。
- member:类成员。
- method:方法,也称成员方法。
- property:属性,也称成员变量。
- constant:类常量。
二、技术实现
1. 定义类
- 定义类基本语法:
class 类名 {}
<?php
# 定义类
class Nothing {}
# 实例化对象
$nothing = new Nothing;var_dump($nothing);
数据类型为对象,对象属于Nothing类,编号为1,当前对象里面有0个属性。
2. 类成员
- 指直接定义在类结构内部的以及成员,即直接依赖{}的成员。
- 分为三种:成员变量、成员方法、类常量。
-
成员变量:
- 需要在变量名字前使用关键字 public。
- 语法:
public 变量名 [=值];
class Nothing {public $a;public $b = 1; }
- 访问方式:
$对象名->属性名;
# 实例化对象 $nothing = new Nothing;# 增 $nothing->c = 20; # 删 unset($nothing->a); # 改 $nothing->b = -1; # 查 echo $nothing->b;
-
成员方法:
- 在类结构{}下定义的函数。
class Salar {public function display() {echo __CLASS__;} }
- 成员方法访问:
$对象名->方法名();
$s = new Salar(); $s->display();
-
类常量:
- 定义方式:
const 常量名 = 值;
class Saler {const PI = 3.14; }
- 类常量不能由对象来进行访问。
- 定义方式:
三、 访问修饰限定符
- 用来控制属性或方法的访问位置。
- 分为三种:public、protected、private。
- 多使用private,少使用public。
1. public
- 表示公有,所修饰的内容可以在任何地方都可访问。
2. protected
- 受保护,只能在当前类和相关类的内部访问。
3. private
- 私有,只能在当前类的内部访问。
4. 空修饰限定符
- 只有方法可以省略修饰限定符,默认为public。
- 不建议省略。
四、类内部对象
- $this是内置对象,代表的是对象。
- $this不受修饰限定符影响。
五、构造和析构
1. 构造方法
- 构造方法:
__construct()
,是一种类结构特有的特殊方法,实例化对象时,对象自动调用。
class Person{public function __construct() {echo __CLASS__;}
}
- 初始化属性
2. 析构方法
- 析构方法
__destruct
在对象被销毁时会自动调用。 - 使用析构方法的情况:
- 保存对象的变量被用来保存其他数据,导致对象内存没有任何变量引用。
- 删除对象变量。
- 脚本执行结束,释放所有变量。
<?php
class Saler{public function __destruct(){echo __FUNCTION__;}
}$saler = new Saler();
unset($saler);
六、范围解析操作符
- 由两个冒号组成
::
,可以实现类直接访问类成员。格式:类名::类成员
- 如果需要有一些自身的数据和操作(类常量、静态成员),由类来访问。属性和方法由对象访问。
1. 访问类常量
class Saler {const PI = 3.14;
}
echo Saler::PI;
2. 静态成员
- 静态成员,是由static关键字修饰的类成员,表示该成员属于类访问。
- 不建议使用对象访问带 static 的静态成员。
- 多用静态,少用非静态。
- 静态属性:
<?php class Person{public $money = 0;public static $count = 0; }$person = new Person(); // 访问成员属性 echo $person->money; echo "<br>"; // 访问静态属性 echo Person::$count;
- 静态方法:
<?php class Person{public static $count = 0;public static function showCount() {echo Person::$count, __FUNCTION__;} } Person::showCount();
3. self关键字
- 静态成员中不能使用
$this
,只能使用self
self
关键字在类的内部使用,用于代替类名。
<?php
class Person{private static $count = 0;public static function showClass() {echo Person::$count;echo self::$count; // self代替类名}
}
Person::showClass();
- 当构造方法被私有化,就没法在类外部实例化对象,此时可以在类内部进行对象实例化。
<?php
class Person{private function __construct() { }public static function getInstance() {return new self();}
}$person = Person::getInstance();
七、类的加载
1. 手动加载
- 即要访问某个类之前,使用文件包含将类所在的文件加载进来
- 加载类文件比较消耗资源,所以事先用
class_exists()
来判断是否存在。
<?php
if (!class_exists("Saler")) {include_once "Saler.php";
}
$saler = new Saler();
2. 自动加载
- 自动加载是PHP提供的一种加载机制。
- php7以前:实现定义一个函数
__autoload()
,然后当系统需要实用类,而内存中不存在的时候,系统会自动调用__autoload()
来加载类文件。 - php7以后:自动加载通过
spl_autoload_register()
实现<?php class Autoload{function c_autoload($class) {$c_file = 'c/' . $class . '.php';if (file_exists($c_file)) require_once $c_file;}function d_autoload($class) {$c_file = 'd/' . $class . '.php';if (file_exists($c_file)) require_once $c_file;} }spl_autoload_register(array("Autoload", "c_autoload")); spl_autoload_register(array("Autoload", "d_autoload"));$saler = new Saler();
八、对象克隆
clone
可以克隆对象,通过已有的对象复制一个新的同样的对象,两个对象不是同一个内存地址。
<?php
class Son{public $name;private $money = 0;
}$son = new Son();
$son_clone = clone $son;
- 在对象被克隆时,新对象会自动调用
__clone()
方法。
class Son{public $name;private $money = 0;public function __clone() {var_dump($this);}
}
- 如果不允许在外部克隆对象,将
__clone()
私有化。
相关文章:
![](https://img-blog.csdnimg.cn/a79c496c9a8346bdabbfc3b16f57681f.png)
PHP面向对象01:面向对象基础
PHP面向对象01:面向对象基础一、关键字说明二、技术实现1. 定义类2. 类成员三、 访问修饰限定符1. public2. protected3. private4. 空修饰限定符四、类内部对象五、构造和析构1. 构造方法2. 析构方法六、范围解析操作符1. 访问类常量2. 静态成员3. self关键字七、类…...
![](https://img-blog.csdnimg.cn/img_convert/3be3ed4db6f14fc458bf9c633213748a.png)
《爆肝整理》保姆级系列教程python接口自动化(十八)--重定向(Location)(详解)
简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问&…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL的索引、视图
什么是索引模式(schema)中的一个数据库对象 在数据库中用来加速对表的查询 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 与表独立存放,但不能独立存在,必须属于某个表 由数据库自动维护,表被删除时,该表上的索引自动被…...
![](https://img-blog.csdnimg.cn/ababa629e028422aa72584ae6146c78a.png)
【JavaWeb】网络层协议——IP协议
目录 IP协议结构 IP地址管理 特殊IP 解决IP地址不够用 动态分配IP地址 NAT网络地址转换 IPV6 IP协议结构 版本:就是IP协议的版本号。目前只有 4 和 6。这里介绍的是IPV4 首部长度:单位是4字节。于TCP首部长度完全一致,也是可变的&…...
![](https://www.ngui.cc/images/no-images.jpg)
【Python学习笔记】41.Python3 多线程
前言 本章介绍Python的多线程。 Python3 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理…...
![](https://img-blog.csdnimg.cn/img_convert/3ebfc82605c06357dff744b8548bcd00.png)
Windows 版本ffmpeg编译概述
在使用ffmpeg过程当中,ffmpeg在Linux(包括mac,android)编译非常容易,直接configure,make即可,Android需要交叉编译,在windows就比较麻烦,庆幸的是ffmpeg官方提供已编译好Windows版本的二进制库(http://ffmpeg.org/download.html#b…...
![](https://img-blog.csdnimg.cn/d09e7ef7680f4bd8a19d93c5446ed267.png)
NETCore下CI/CD之自动化测试 (详解篇)
NETCore下CI/CD之自动化测试 (详解篇) 目录:导读 前言 安装JDK 安装 Tomcat 首先,我们需要指定 Tomcat.PID 进程文件,进入 /usr/local/tomcat/bin,编辑文件 增加 tomcat 账户并赋予权限 防止Jeknins…...
![](https://www.ngui.cc/images/no-images.jpg)
Hoeffding不等式剪枝方法
在基于物品的协通过滤算法中,当用户历史行为数据有很多时,对计算会有很大挑战,对此可以使用剪枝对数据进行化简来达到减少计算量。 不是每个物品对都需要进行增量计算。对于两个物品的相似度,每次更新都能够得到一个新的相…...
![](https://www.ngui.cc/images/no-images.jpg)
【算法】数组中的重复数字问题
数组中的重复数据 数组中重复的数字 错误的集合 以第三题,错误的集合为例 对于这样的问题,有很简单的解决方式,先遍历一次数组,用一个哈希表记录每个数字出现的次数,然后遍历一次 [1…N],看看那个元素重…...
![](https://img-blog.csdnimg.cn/c4e978b23a6d448b9e89f3d7ee98e3da.png)
数值方法笔记2:解决非线性方程
1. 不动点定理及其条件验证2. 收敛阶、收敛检测与收敛加速2.1 如何估计不动点迭代的收敛阶xk1g(xk){x}_{{k}1}{g}\left({x}_{{k}}\right)xk1g(xk)2.2 给定精度的情况下,如何预测不动点迭代需要迭代的次数2.3 如何加快收敛的速度2.4 停止不定点迭代的条件2.5 不动…...
![](https://img-blog.csdnimg.cn/d9b2416074914b189e5b6caeb7894632.png)
基于SpringBoot的在线文档管理系统
文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...
![](https://img-blog.csdnimg.cn/img_convert/2aea4fad9951cd4ab03e267334bb3994.png)
软件体系结构(期末复习)
文章目录软件体系结构软件体系结构概论软件体系结构建模软件体系结构风格统一建模语言基于体系结构的软件开发软件体系结构 软件体系结构概论 软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的表现: 软件危机的原因: 软件工程的基本要素…...
![](https://img-blog.csdnimg.cn/e6459a40afb04adc99aad3068f320be4.png#pic_center)
[vue3] pinia的基本使用
使用Pinia npm install piniastore文件里index.js import { createPinia } from piniaconst pinia createPinia()export default piniamain.js导入并引用 import { createApp } from vue import App from ./App.vue import pinia from ./storescreateApp(App).use(pinia).m…...
![](https://www.ngui.cc/images/no-images.jpg)
进程和线程详解
在计算机领域中,进程和线程是非常重要的概念。了解进程和线程是软件开发的基础,也是计算机科学教育中的一部分。本文将介绍进程和线程的概念、区别和应用。 一、什么是进程 在计算机科学中,进程是正在执行的程序实例。一个进程可以由一个或…...
《刀锋》读书笔记
刀锋(毛姆长篇作品精选)毛姆50个笔记点评认为好看的确是完美的结局。《刀锋》里面的人每个人都以自己的方式生活着。艾略特的势利,拉里的自由,伊莎贝尔的现实,苏珊的清醒,索菲的堕落,至于“我”…...
![](https://www.ngui.cc/images/no-images.jpg)
nginx中的ngx_modules
ngx_modules和ngx_module_names是configure脚本生成的,是在objs/ngx_modules.c文件中与其生成的相关的脚本文件相关的变量在options脚本中定义了objs目录的变量NGX_OBJSobjs在init脚本中定义的最终存放ngx_modules的文件 NGX_MODULES_C$NGX_OBJS/ngx_modules.c2. 处…...
![](https://img-blog.csdnimg.cn/b0524e81453b4158b5d78dbcc37cdc86.png#pic_center)
设计模式之访问者模式
什么是访问者模式 访问者模式提供了一个作用于某对象结构中的各元素的操作表示,他使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式主要包含以下几个角色: Vistor(抽象访问者):为对象结…...
![](https://img-blog.csdnimg.cn/fc19135c31b8413f9e82d48f3acf08e0.png)
Go项目(三)
文章目录用户微服务表结构查表web 服务跨域问题图形验证码短信用户注册服务中心注册 grpc 服务动态获取端口负载均衡配置中心启动项目小结用户微服务 作为系统的第一个微服务,开发的技术点前面已经了解了一遍,虽有待补充,但急需实战这里主要…...
![](https://img-blog.csdnimg.cn/106af4d33ea14254a4aef06dd50fdfc2.png)
CTK学习:(一)编译CTK
CTK插件框架简介 CTK Plugin Framework是用于C++的动态组件系统,以OSGi规范为模型。在此框架下,应用程序由不同的组件组成,遵循面向服务的方法。 ctk是一个开源项目,Github 地址:https://github.com/commontk。 源码地址commontk/CTK: A set of common support code for…...
![](https://img-blog.csdnimg.cn/f7b40d21074743d59dadaf85ea0973f8.png)
15种NLP数据增强方法总结与对比
数据增强的方法 数据增强(Data Augmentation,简称DA),是指根据现有数据,合成新数据的一类方法。毕竟数据才是真正的效果天花板,有了更多数据后可以提升效果、增强模型泛化能力、提高鲁棒性等。然而由于NLP…...
![](https://img-service.csdnimg.cn/img_convert/b36376b20ad1074341ffc8bca9a32eca.jpeg)
Python每日一练(20230219)
目录 1. 循环随机取数组直到得出指定数字? 2. 旋转链表 3. 区间和的个数 1. 循环随机取数组直到得出指定数字? 举个例子: 随机数字范围:0~100 每组数字量:6(s1,s2,s3,s4,s5,s6) 第二轮开始随…...
![](https://img-blog.csdnimg.cn/img_convert/36e764f01c63449eb9fce927d8a5374e.png)
vTESTstudio - VT System CAPL Functions - VT7001
vtsSerialClose - 关闭VT系统通道的串行端口功能:关闭由系统变量命名空间指定的VT系统通道的串行端口。Target:目标通道变量空间名称,例如:VTS::ECUPowerSupply返回值:0:成功重置目标通道最大和最小值-1&am…...
![](https://img-blog.csdnimg.cn/9f2bd1d874c54e6c890a5e2e0f63e4e1.png)
「可信计算」论文初步解读
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...
CSDN 算法技能树 蓝桥杯-基础 刷题+思考总结
切面条-蓝桥杯-基础-CSDN算法技能树https://edu.csdn.net/skill/algorithm/algorithm-530255df51be437b967cbc4524fe66ea?category188 目录 切面条 大衍数列 门牌制作 方阵转置 微生物增殖 成绩统计 星系炸弹 判断闰年的依据: 特别数的和 *日志统计*(双指…...
![](https://images.linuxba.com/小书匠/2023-2-19/1676802441064.png)
信小程序点击按钮绘制定制转发分享图
1. 说明 先上代码片断分享链接: https://developers.weixin.qq.com/s/vl3ws9mA72GG 使用 painter 画图 按钮传递定制化信息 效果如下: 2. 关键代码说明 文件列表如下: {"usingComponents": {"painter": "/com…...
![](https://img-blog.csdnimg.cn/d09e7ef7680f4bd8a19d93c5446ed267.png)
Python自动化测试-使用Pandas来高效处理测试数据
Python自动化测试-使用Pandas来高效处理测试数据 目录:导读 一、思考 二、使用pandas来操作Excel文件 三、使用pandas来操作csv文件 四、总结 一、思考 1.Pandas是什么? 功能极其强大的数据分析库可以高效地操作各种数据集 csv格式的文件Excel文件H…...
![](https://img-blog.csdnimg.cn/img_convert/6a37410866559c571aad951fb537c0c3.png)
语音增强学习路线图Roadmap
语音增强算是比较难的研究领域,从入门到精通有很多台阶,本文介绍一些有价值的书籍,值得反复阅读。主要分为基础类和进阶类书籍,大多都是理论和实践相结合的书籍,编程实践是抓手,让知识和基础理论变扎实。基础书籍《信号…...
![](https://www.ngui.cc/images/no-images.jpg)
nginx配置ssl实现https访问
文章目录一、介绍二、创建证书1、OpenSSL创建自签名密钥和证书三、nginx配置四、开放端口一、介绍 nginx配置ssl证书,实现https访问,可以使用自签名SSL证书或者购买机构颁发的证书两种方式参考链接 https://blog.csdn.net/weixin_39198406/article/deta…...
![](https://img-blog.csdnimg.cn/img_convert/68fd7d428648ba5ed6e97913956e13c8.jpeg)
JavaScript 语句
JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。JavaScript 语句JavaScript 语句是发给浏览器的命令。这些命令的作用是告诉浏览器要做的事情。下面的 JavaScript 语句向 id"demo" 的 HTML 元素输出文本 "Hello Dolly" :…...
![](https://www.ngui.cc/images/no-images.jpg)
将古老的ASP项目转换为PHP初探
ASP 是一种服务器端脚本语言,主要用于开发动态 Web 应用程序。ASP 可以在服务器上执行代码,并将结果返回给客户端浏览器,实现动态生成 Web 页面的功能。ASP 代码通常包含在 <% %> 标记中,以下是一个简单的 ASP 程序示例&…...
![](https://yqfile.alicdn.com/9f9a1a4103f441be24cf9f979a1edb5cb13967b9.png)
山西人工智能建站系统软件/淘宝店铺怎么引流推广
本节书摘来自异步社区《Android 应用案例开发大全(第二版)》一书中的第6章,第6.6节Android源代码与过滤器,作者李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.6 Android源代码与过滤器Android开发权威指…...
![](/images/no-images.jpg)
建设企业营销型网站/成都seo顾问
数据库连接池 概念:数据库连接池就是一个容器(集合),存放数据库连接的容器。 当系统初始化后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象&am…...
![](/images/no-images.jpg)
网站建设想法/百度收录情况查询
前二十年为自己, 中间二十年为父母, 后面二十年为子女, 还有的话就不知道为谁了。转载于:https://www.cnblogs.com/xiaohaokof/archive/2010/09/23/1833425.html...
![](/images/no-images.jpg)
企业名录搜索软件排行榜/如何seo搜索引擎优化
css3动画:弹出式菜单 今天主要来讲讲transition和transform结合做的动画,会举一些现在(2017年)常见的动画例子。 注:本人也接触css3不久,如果写的有纰漏请指出,不喜勿喷。 弹出式菜单 效果&…...
![](https://img-blog.csdnimg.cn/img_convert/630021b8d1b020f5bf30a91cd468e980.png)
海南房地产网站建设/aso应用商店优化原因
Win7IE主页被锁定怎么解除?如果某个程序或者代码篡改了IE浏览器主页,我们重新修改该主页就可以了,但如果某程序得到一些权限,直接修改组策略,并且让IE主页设置变成灰色~想来砸电脑的心思都有了,这时候我们该…...
![](https://img-blog.csdnimg.cn/img_convert/d662e1552f020b07de57f811efe1f0f9.png)
网站搭建代理/网站模板下载
推荐阅读: 这套Github上40Kstar学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 最全面试题新鲜出炉:70算法题、近30种大厂面试笔试常考知识点 前言 最近在做的业务场景…...