PHP 面向对象编程
PHP 面向对象编程
PHP 是一种流行的服务器端脚本语言,广泛用于 web 开发。它支持多种编程范式,包括面向对象编程(OOP)。面向对象编程是一种编程风格,它使用“对象”来设计软件,其中对象是数据和行为的集合。在 PHP 中,面向对象编程提供了一种组织代码的强大方式,使得代码更加模块化、可重用和易于维护。
PHP 面向对象基础
类和对象
在 PHP 中,面向对象编程的核心是类和对象。类是一个蓝图,它定义了对象的属性(变量)和方法(函数)。对象是根据类创建的实例。
class MyClass {public $property = "I'm a property!";public function __construct() {echo 'The class "', __CLASS__, '" was initiated!<br />';}public function __destruct() {echo 'The class "', __CLASS__, '" was destroyed.<br />';}public function myMethod() {echo 'MyClass method called.';}
}$obj = new MyClass();
$obj->myMethod();
访问控制
PHP 提供了三种访问控制修饰符:public、protected 和 private。这些修饰符决定了类成员(属性和方法)的访问级别。
public:公有的类成员可以在任何地方被访问。protected:受保护的类成员只能被其自身和子类访问。private:私有的类成员只能被其所属的类访问。
class MyClass {public $public = 'Public';protected $protected = 'Protected';private $private = 'Private';function printHello() {echo $this->public;echo $this->protected;echo $this->private;}
}$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
继承
继承是 OOP 的一个核心概念,允许我们创建一个类(子类),它继承另一个类(父类)的属性和方法。
class MyClass {public function myMethod() {echo 'MyClass method called.';}
}class ChildClass extends MyClass {
}$obj = new ChildClass();
$obj->myMethod(); // Outputs "MyClass method called."
多态性
多态性允许使用一个接口来定义多种不同的实现方式。在 PHP 中,这通常通过接口(interface)和抽象类(abstract class)来实现。
interface Animal {public function makeSound();
}class Cat implements Animal {public function makeSound() {echo "Meow";}
}class Dog implements Animal {public function makeSound() {echo "Bark";}
}$cat = new Cat();
$dog = new Dog();$cat->makeSound(); // Outputs "Meow"
$dog->makeSound(); // Outputs "Bark"
构造函数和析构函数
构造函数是一种特殊的方法,在创建对象时自动调用。析构函数在对象不再被使用时自动调用。
class MyClass {function __construct() {echo 'The class "', __CLASS__, '" was initiated!<br />';}function __destruct() {echo 'The class "', __CLASS__, '" was destroyed.<br />';}
}$obj = new MyClass();
高级面向对象特性
静态属性和方法
静态属性和方法不需要通过对象实例来访问,而是直接通过类名来访问。
class MyClass {public static $myStaticProperty = 'Static property';public static function myStaticMethod() {return 'Static method called.';}
}echo MyClass::$myStaticProperty;
echo MyClass::myStaticMethod();
抽象类和接口
抽象类不能被实例化,只能被继承。接口是一种完全抽象的类,用于定义对象之间的交互。
abstract class AbstractClass {abstract protected function getValue();abstract protected function prefixValue($prefix);public function printOut() {print $this->getValue() . "\n";}
}class ConcreteClass1 extends AbstractClass {protected function getValue() {return "ConcreteClass1";}public function prefixValue($prefix) {return "{$prefix}ConcreteClass1";}
}$class1 = new ConcreteClass1();
$class1->printOut();
traits
Traits 是一种代码复用的方法,它允许开发者在不使用继承的情况下重用一组方法。
trait SayWorld {public function sayHello() {echo 'World!';}
}class MyHelloWorld {use Say相关文章:
PHP 面向对象编程
PHP 面向对象编程 PHP 是一种流行的服务器端脚本语言,广泛用于 web 开发。它支持多种编程范式,包括面向对象编程(OOP)。面向对象编程是一种编程风格,它使用“对象”来设计软件,其中对象是数据和行为的集合…...
应急响应(1)-同事电脑
一、现象 重要时间节点,同事反馈桌面有鼠标移动、随机断网;发现登录账户多了一个,由于电脑长时间没有更改过密码,导致忘记密码无法登录。随机联系进行应急处理。 二、排查 2.1、密码重置/删除 由于同事忘记密码导致无法进行登录…...
class 023 随机快速排序
这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…...
如何理解矩阵的复数特征值和特征向量?
实数特征值的直观含义非常好理解,它就是在对应的特征向量方向上的纯拉伸/压缩。 而复数特征值,我们可以把它放在复数域中理解。但是这里给出一个不那么简洁、但是更加直观的理解方式:把它放在实空间中。那么复数特征值表现的就是旋转等比放大…...
怎么查看网站是否被谷歌收录,查看网站是否被搜索引擎收录5个方法与步骤
要查看网站是否被谷歌(Google)或其他搜索引擎收录,是网站管理和SEO(搜索引擎优化)中的一个重要环节。以下是查看网站是否被搜索引擎收录5个方法与步骤,帮助您确认网站是否被搜索引擎成功索引: …...
Java工具--stream流
Java工具--stream流 过滤(filter)统计求最大最小和均值求和(sum)过滤后,对数据进行统计 遍历(map)规约(reduce)排序(sorted)去重(dist…...
什么是 JWT?它是如何工作的?
松哥最近辅导了几个小伙伴秋招,有小伙伴在面小红书时遇到这个问题,这个问题想回答全面还是有些挑战,松哥结合之前的一篇旧文和大伙一起来聊聊。 一 无状态登录 1.1 什么是有状态 有状态服务,即服务端需要记录每次会话的客户端信…...
微信小程序使用picker,数组怎么设置默认值
默认先显示请选择XXX。然后点击弹出选择列表。如果默认value是0的话,他就直接默认显示数组的第一个了。<picker mode"selector" :value"planIndex" :range"planStatus" range-key"label" change"bindPlanChange&qu…...
Springboot生成树工具类,可通过 id/code 编码生成 2.0版本
优化工具类中,查询父级时便利多次的问题 import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.mutable.MutableLong; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.spri…...
17、CPU缓存架构详解高性能内存队列Disruptor实战
1.CPU缓存架构详解 1.1 CPU高速缓存概念 CPU缓存即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储器。CPU高速缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是…...
算法训练营打卡Day18
目录 二叉搜索树的最小绝对差二叉搜索树中的众数二叉树的最近公共祖先额外练手题目 题目1、二叉搜索树的最小绝对差 力扣题目链接(opens new window) 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 思…...
【leetcode】169.多数元素
boyer-moore算法最简单理解方法: 假设你在投票选人 如果你和候选人(利益)相同,你就会给他投一票(count1),如果不同,你就会踩他一下(count-1)当候选人票数为0&…...
MyBatis<foreach>标签的用法与实践
foreach标签简介 实践 demo1 简单的一个批量更新,这里传入了一个List类型的集合作为参数,拼接到 in 的后面 ,来实现一个简单的批量更新 <update id"updateVislxble" parameterType"java.util.List">update model…...
R语言Shiny包新手教程
R语言Shiny包新手教程 1. 简介 Shiny 是一个 R 包,用于创建交互式网页应用。它非常适合展示数据分析结果和可视化效果。 2. 环境准备 安装R和RStudio 确保你的计算机上安装了 R 和 RStudio。你可以从 CRAN 下载 R,或从 RStudio 官网 下载 RStudio。…...
[大象快讯]:PostgreSQL 17 重磅发布!
家人们,数据库界的大新闻来了!📣 PostgreSQL 17 正式发布,全球开发者社区的心血结晶,带来了一系列令人兴奋的新特性和性能提升。 发版通告全文如下 PostgreSQL 全球开发小组今天(2024-09-26)宣布…...
CHI trans--Home节点发起的操作
总目录: CHI协议简读汇总-CSDN博客https://blog.csdn.net/zhangshangjie1/article/details/131877216 Home节点能够发起的操作,包含如下几类: Home to Subordinate Read transactionsHome to Subordinate Write transactionsHome to Subor…...
Rust和Go谁会更胜一筹
在国内,我认为Go语言会成为未来的主流,因为国内程序员号称码农,比较适合搬砖,而Rust对心智要求太高了,不适合搬砖。 就个人经验来看,Go语言简单,下限低,没有什么心智成本,…...
记HttpURLConnection下载图片
目录 一、示例代码1 二、示例代码2 一、示例代码1 import java.io.*; import java.net.HttpURLConnection; import java.net.URL;public class Test {/*** 下载图片*/public void getNetImg() {InputStream inStream null;FileOutputStream fOutStream null;try {// URL 统…...
物联网实训室建设的必要性
物联网实训室建设的必要性 一、物联网发展的背景 物联网(IoT)是指通过信息传感设备,按照约定的协议,将任何物品与互联网连接起来,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络…...
初识C语言(四)
目录 前言 十一、常见关键字(补充) (1)register —寄存器 (2)typedef类型重命名 (3)static静态的 1、修饰局部变量 2、修饰全局变量 3、修饰函数 十二、#define定义常量和宏…...
2023B卷,阿里巴巴找黄金宝箱(4)
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:华为OD面试 文章目录 一、🍀前言 1.1 ☘️题目详情 1.2 ☘️参考解题答案 一、🍀前言 2023B卷,阿里巴巴找黄金宝箱(4)。 1.1 ☘️题目详情 题目:…...
TEdit地图编辑器:从新手到专家的泰拉瑞亚世界创作指南
TEdit地图编辑器:从新手到专家的泰拉瑞亚世界创作指南 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you ch…...
通过API Key管理与审计日志功能加强企业级应用安全
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过API Key管理与审计日志功能加强企业级应用安全 将大模型能力集成到企业级应用,不仅关乎功能实现,更是一…...
Rails AI上下文管理引擎:构建LLM友好的业务操作上下文
1. 项目概述:一个AI驱动的Rails上下文管理引擎最近在重构一个历史悠久的Rails项目时,我遇到了一个典型的老问题:业务逻辑散落在各个控制器、模型和Service对象里,一个简单的用户操作背后要追踪七八个文件才能理清完整的上下文。更…...
Hyprland截图方案:Wayland下高效截图工具配置与优化指南
1. 项目概述与核心价值最近在折腾Hyprland窗口管理器,发现一个痛点:截图。系统自带的工具要么功能单一,要么和Hyprland的Wayland环境配合不佳,用起来总感觉差点意思。直到我发现了nikolai2038/hyprland-screenshoter这个项目&…...
BBDown完全指南:5分钟掌握B站视频下载终极方案
BBDown完全指南:5分钟掌握B站视频下载终极方案 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 你是否经常遇到想收藏B站优质视频却找不到合适工具的困扰?当网络…...
超导输电技术:从原理到工程应用的挑战与前景
1. 超导输电线路:从技术神话到工程现实的漫长跋涉大约二十年前,当“高温超导”这个名词开始从实验室走向产业界的视野时,整个电力工程领域都为之振奋。想象一下,我们日常依赖的庞大电网,其输电线路中高达5%到10%的电能…...
String、StringBuilder、StringBuffer 学习与深入
1 学习的知识是什么 String:字符串,一旦创建里面的内容就不可变,每次使用拼接都创建一个新的对象而原有的对象依旧存在。 StringBuilder:可变字符串线程不安全,…...
ARM GIC中断控制器虚拟化架构与优化实践
1. ARM GIC中断控制器虚拟化架构概述中断控制器是现代计算机系统中至关重要的组件,特别是在虚拟化环境中,高效的中断处理机制直接影响着虚拟机的性能和响应能力。ARM架构的通用中断控制器(GIC)从v3版本开始引入了完整的虚拟化支持,为虚拟机监…...
KouriChat + DeepSeek + 微信接入:本地 AI 角色聊天机器人搭建实录
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录: 前言1 KouriChat项目简介2 环境准备3 环境安装及项目部署3.1 Python3.11 安装3.2 启动KouriC…...
