当前位置: 首页 > news >正文

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 是一种流行的服务器端脚本语言&#xff0c;广泛用于 web 开发。它支持多种编程范式&#xff0c;包括面向对象编程&#xff08;OOP&#xff09;。面向对象编程是一种编程风格&#xff0c;它使用“对象”来设计软件&#xff0c;其中对象是数据和行为的集合…...

应急响应(1)-同事电脑

一、现象 重要时间节点&#xff0c;同事反馈桌面有鼠标移动、随机断网&#xff1b;发现登录账户多了一个&#xff0c;由于电脑长时间没有更改过密码&#xff0c;导致忘记密码无法登录。随机联系进行应急处理。 二、排查 2.1、密码重置/删除 由于同事忘记密码导致无法进行登录…...

class 023 随机快速排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…...

如何理解矩阵的复数特征值和特征向量?

实数特征值的直观含义非常好理解&#xff0c;它就是在对应的特征向量方向上的纯拉伸/压缩。 而复数特征值&#xff0c;我们可以把它放在复数域中理解。但是这里给出一个不那么简洁、但是更加直观的理解方式&#xff1a;把它放在实空间中。那么复数特征值表现的就是旋转等比放大…...

怎么查看网站是否被谷歌收录,查看网站是否被搜索引擎收录5个方法与步骤

要查看网站是否被谷歌&#xff08;Google&#xff09;或其他搜索引擎收录&#xff0c;是网站管理和SEO&#xff08;搜索引擎优化&#xff09;中的一个重要环节。以下是查看网站是否被搜索引擎收录5个方法与步骤&#xff0c;帮助您确认网站是否被搜索引擎成功索引&#xff1a; …...

Java工具--stream流

Java工具--stream流 过滤&#xff08;filter&#xff09;统计求最大最小和均值求和&#xff08;sum&#xff09;过滤后&#xff0c;对数据进行统计 遍历&#xff08;map&#xff09;规约&#xff08;reduce&#xff09;排序&#xff08;sorted&#xff09;去重&#xff08;dist…...

什么是 JWT?它是如何工作的?

松哥最近辅导了几个小伙伴秋招&#xff0c;有小伙伴在面小红书时遇到这个问题&#xff0c;这个问题想回答全面还是有些挑战&#xff0c;松哥结合之前的一篇旧文和大伙一起来聊聊。 一 无状态登录 1.1 什么是有状态 有状态服务&#xff0c;即服务端需要记录每次会话的客户端信…...

微信小程序使用picker,数组怎么设置默认值

默认先显示请选择XXX。然后点击弹出选择列表。如果默认value是0的话&#xff0c;他就直接默认显示数组的第一个了。<picker mode"selector" :value"planIndex" :range"planStatus" range-key"label" change"bindPlanChange&qu…...

Springboot生成树工具类,可通过 id/code 编码生成 2.0版本

优化工具类中&#xff0c;查询父级时便利多次的问题 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缓存即高速缓冲存储器&#xff0c;是位于CPU与主内存间的一种容量较小但速度很高的存储器。CPU高速缓存可以分为一级缓存&#xff0c;二级缓存&#xff0c;部分高端CPU还具有三级缓存&#xff0c;每一级缓存中所储存的全部数据都是…...

算法训练营打卡Day18

目录 二叉搜索树的最小绝对差二叉搜索树中的众数二叉树的最近公共祖先额外练手题目 题目1、二叉搜索树的最小绝对差 力扣题目链接(opens new window) 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 思…...

【leetcode】169.多数元素

boyer-moore算法最简单理解方法&#xff1a; 假设你在投票选人 如果你和候选人&#xff08;利益&#xff09;相同&#xff0c;你就会给他投一票&#xff08;count1&#xff09;&#xff0c;如果不同&#xff0c;你就会踩他一下&#xff08;count-1&#xff09;当候选人票数为0&…...

MyBatis<foreach>标签的用法与实践

foreach标签简介 实践 demo1 简单的一个批量更新&#xff0c;这里传入了一个List类型的集合作为参数&#xff0c;拼接到 in 的后面 &#xff0c;来实现一个简单的批量更新 <update id"updateVislxble" parameterType"java.util.List">update model…...

R语言Shiny包新手教程

R语言Shiny包新手教程 1. 简介 Shiny 是一个 R 包&#xff0c;用于创建交互式网页应用。它非常适合展示数据分析结果和可视化效果。 2. 环境准备 安装R和RStudio 确保你的计算机上安装了 R 和 RStudio。你可以从 CRAN 下载 R&#xff0c;或从 RStudio 官网 下载 RStudio。…...

[大象快讯]:PostgreSQL 17 重磅发布!

家人们&#xff0c;数据库界的大新闻来了&#xff01;&#x1f4e3; PostgreSQL 17 正式发布&#xff0c;全球开发者社区的心血结晶&#xff0c;带来了一系列令人兴奋的新特性和性能提升。 发版通告全文如下 PostgreSQL 全球开发小组今天&#xff08;2024-09-26&#xff09;宣布…...

CHI trans--Home节点发起的操作

总目录&#xff1a; CHI协议简读汇总-CSDN博客https://blog.csdn.net/zhangshangjie1/article/details/131877216 Home节点能够发起的操作&#xff0c;包含如下几类&#xff1a; Home to Subordinate Read transactionsHome to Subordinate Write transactionsHome to Subor…...

Rust和Go谁会更胜一筹

在国内&#xff0c;我认为Go语言会成为未来的主流&#xff0c;因为国内程序员号称码农&#xff0c;比较适合搬砖&#xff0c;而Rust对心智要求太高了&#xff0c;不适合搬砖。 就个人经验来看&#xff0c;Go语言简单&#xff0c;下限低&#xff0c;没有什么心智成本&#xff0c…...

记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 统…...

物联网实训室建设的必要性

物联网实训室建设的必要性 一、物联网发展的背景 物联网&#xff08;IoT&#xff09;是指通过信息传感设备&#xff0c;按照约定的协议&#xff0c;将任何物品与互联网连接起来&#xff0c;进行信息交换和通信&#xff0c;以实现智能化识别、定位、跟踪、监控和管理的一种网络…...

初识C语言(四)

目录 前言 十一、常见关键字&#xff08;补充&#xff09; &#xff08;1&#xff09;register —寄存器 &#xff08;2&#xff09;typedef类型重命名 &#xff08;3&#xff09;static静态的 1、修饰局部变量 2、修饰全局变量 3、修饰函数 十二、#define定义常量和宏…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...