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()私有化。
相关文章:
PHP面向对象01:面向对象基础
PHP面向对象01:面向对象基础一、关键字说明二、技术实现1. 定义类2. 类成员三、 访问修饰限定符1. public2. protected3. private4. 空修饰限定符四、类内部对象五、构造和析构1. 构造方法2. 析构方法六、范围解析操作符1. 访问类常量2. 静态成员3. self关键字七、类…...
《爆肝整理》保姆级系列教程python接口自动化(十八)--重定向(Location)(详解)
简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问&…...
MySQL的索引、视图
什么是索引模式(schema)中的一个数据库对象 在数据库中用来加速对表的查询 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 与表独立存放,但不能独立存在,必须属于某个表 由数据库自动维护,表被删除时,该表上的索引自动被…...
【JavaWeb】网络层协议——IP协议
目录 IP协议结构 IP地址管理 特殊IP 解决IP地址不够用 动态分配IP地址 NAT网络地址转换 IPV6 IP协议结构 版本:就是IP协议的版本号。目前只有 4 和 6。这里介绍的是IPV4 首部长度:单位是4字节。于TCP首部长度完全一致,也是可变的&…...
【Python学习笔记】41.Python3 多线程
前言 本章介绍Python的多线程。 Python3 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理…...
Windows 版本ffmpeg编译概述
在使用ffmpeg过程当中,ffmpeg在Linux(包括mac,android)编译非常容易,直接configure,make即可,Android需要交叉编译,在windows就比较麻烦,庆幸的是ffmpeg官方提供已编译好Windows版本的二进制库(http://ffmpeg.org/download.html#b…...
NETCore下CI/CD之自动化测试 (详解篇)
NETCore下CI/CD之自动化测试 (详解篇) 目录:导读 前言 安装JDK 安装 Tomcat 首先,我们需要指定 Tomcat.PID 进程文件,进入 /usr/local/tomcat/bin,编辑文件 增加 tomcat 账户并赋予权限 防止Jeknins…...
Hoeffding不等式剪枝方法
在基于物品的协通过滤算法中,当用户历史行为数据有很多时,对计算会有很大挑战,对此可以使用剪枝对数据进行化简来达到减少计算量。 不是每个物品对都需要进行增量计算。对于两个物品的相似度,每次更新都能够得到一个新的相…...
【算法】数组中的重复数字问题
数组中的重复数据 数组中重复的数字 错误的集合 以第三题,错误的集合为例 对于这样的问题,有很简单的解决方式,先遍历一次数组,用一个哈希表记录每个数字出现的次数,然后遍历一次 [1…N],看看那个元素重…...
数值方法笔记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 不动…...
基于SpringBoot的在线文档管理系统
文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...
软件体系结构(期末复习)
文章目录软件体系结构软件体系结构概论软件体系结构建模软件体系结构风格统一建模语言基于体系结构的软件开发软件体系结构 软件体系结构概论 软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的表现: 软件危机的原因: 软件工程的基本要素…...
[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…...
进程和线程详解
在计算机领域中,进程和线程是非常重要的概念。了解进程和线程是软件开发的基础,也是计算机科学教育中的一部分。本文将介绍进程和线程的概念、区别和应用。 一、什么是进程 在计算机科学中,进程是正在执行的程序实例。一个进程可以由一个或…...
《刀锋》读书笔记
刀锋(毛姆长篇作品精选)毛姆50个笔记点评认为好看的确是完美的结局。《刀锋》里面的人每个人都以自己的方式生活着。艾略特的势利,拉里的自由,伊莎贝尔的现实,苏珊的清醒,索菲的堕落,至于“我”…...
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. 处…...
设计模式之访问者模式
什么是访问者模式 访问者模式提供了一个作用于某对象结构中的各元素的操作表示,他使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式主要包含以下几个角色: Vistor(抽象访问者):为对象结…...
Go项目(三)
文章目录用户微服务表结构查表web 服务跨域问题图形验证码短信用户注册服务中心注册 grpc 服务动态获取端口负载均衡配置中心启动项目小结用户微服务 作为系统的第一个微服务,开发的技术点前面已经了解了一遍,虽有待补充,但急需实战这里主要…...
CTK学习:(一)编译CTK
CTK插件框架简介 CTK Plugin Framework是用于C++的动态组件系统,以OSGi规范为模型。在此框架下,应用程序由不同的组件组成,遵循面向服务的方法。 ctk是一个开源项目,Github 地址:https://github.com/commontk。 源码地址commontk/CTK: A set of common support code for…...
15种NLP数据增强方法总结与对比
数据增强的方法 数据增强(Data Augmentation,简称DA),是指根据现有数据,合成新数据的一类方法。毕竟数据才是真正的效果天花板,有了更多数据后可以提升效果、增强模型泛化能力、提高鲁棒性等。然而由于NLP…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
