自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 【PHP 命名空间(Namespace)全解析:从零开始,一篇讲透!】

命名空间(Namespace)就是给类、函数、常量起“全名”的方式。class User { } // 全名是:Admin\Userclass User { } // 全名是:Student\User✅ 现在不会冲突了!一个是“管理员的小明”,一个是“学生的小明”。phpnamespace 项目名\模块名\子模块;必须写在文件最开头php之后)一个文件一般只定义一个命名空间(推荐)根空间 \├── MyProject\Order → 当前空间。

2025-08-22 15:40:08 953

原创 什么是“延迟对象”?(小白也能懂)

延迟对象 = 先给“承诺券”,要用时再兑现它让你的程序更快启动、更省资源,尤其适合那些“可能用,也可能不用”的重型对象。

2025-08-14 13:58:36 273

原创 【 协变与逆变:用“动物收容所”讲清楚 PHP 类型的“灵活继承”】

场景能不能变?如何变?生活例子支持版本返回值✅ 协变越来越具体(Animal → Cat)“动物” → “猫”PHP 7.4+参数✅ 逆变越来越宽泛(AnimalFood → Food)“只能吃动物粮” → “啥都能吃”PHP 7.4+ (部分支持从 PHP 7.2 开始)属性(只读)✅ 协变可以更具体“宠物” → “狗”PHP 8.4+属性(可读可写)❌ 不变类型不能变既要读又要写,不能乱改协变:返回值 → 越来越“小”(具体)逆变。

2025-08-12 16:30:56 1001

原创 【 PHP 面向对象四大核心知识点全面详解】

知识点核心思想关键函数/操作符最佳实践对象复制独立性浅复制共享内部,深复制完全独立clone__clone()需要完全独立时,务必实现__clone()进行深复制对象比较同一性 vs. 相等性===看实体,==看内容=====明确需求:判断是否同一个用===,判断内容是否相同用==对象与引用句柄 vs. 别名对象操作靠句柄,句柄按值传递理解“对象句柄按值传递”;用于创建变量别名对象序列化持久化与重建打包状态,重建需“说明书”反序列化前必须定义类;善用__sleep()__wakeup();

2025-08-12 15:09:02 1046

原创 【PHP 魔术方法:让对象“活”起来的秘密武器】

魔术方法是 PHP 内置的一些特殊方法,它们以两个下划线开头(如),会在特定时刻自动被 PHP 调用。你不需要手动去调它们,只要定义好,PHP 就会在合适的时机“悄悄”执行。它们就像“后台服务员”,在你不注意的时候帮你完成各种任务。当你用看对象时,默认会显示所有属性。但你可以用控制显示内容。return ['提示' => '密码已被隐藏','长度' => strlen($this->password)// 输出:// ["提示"]=> string(12) "密码已被隐藏"

2025-08-11 16:13:38 771

原创 【PHP 重载(Overloading)——不是你想的那样!】

你找的东西不存在?别急,我有魔法帮你搞定!这些“魔法”就是所谓的魔术方法(Magic Methods)。问题回答PHP 有 Java 那种方法重载吗?❌ 没有!PHP 不支持同名不同参的方法PHP 的“重载”是啥?✅ 是“动态处理不存在的属性/方法”靠什么实现?__get__set__call等什么时候触发?✅ 访问“不可访问”或“不存在”的属性/方法时能做什么?✅ 动态属性、API 路由、Mock 对象、配置类等。

2025-08-11 14:46:39 918

原创 【匿名类(Anonymous Class)——“一次性用完就扔的小纸条”】

写new class可选:传参数 →可选:继承类 →可选:实现接口 →写{},在里面写属性和方法可选:使用 Trait →写构造函数接收参数创建对象并使用。

2025-08-11 13:39:35 291

原创 【PHP 中的代码复用利器:Trait】

想象一下你正在建造一座房子,你需要在不同的房间安装相同的电器设备(如灯、空调等)。如果每间房都要单独设计这些设备的安装方案,那会非常麻烦。于是你决定创建一个“模板”,这个模板包含了所有房间都需要的电器安装方案,然后你可以轻松地把这套方案应用到每个房间里。这就是 Trait 的工作原理。Trait是一种特殊的结构,它允许你定义一组方法,然后把这些方法“复制粘贴”到多个类中。与普通的类不同,Trait 不能被实例化——也就是说,你不能直接创建一个 Trait 的对象。

2025-08-08 16:09:06 919

原创 【PHP 中的 `use` 关键字完全指南】

use。

2025-08-07 16:50:51 620

原创 【PHP 接口(Interface)完全入门指南】

想象一下:你想开一家咖啡店,需要供应商提供咖啡豆。你和供应商签了一份合同,上面写着:“你必须能提供咖啡豆、牛奶、糖,并且保证每天送货。这份合同不关心你是怎么种咖啡豆的你能不能做到这些事?在 PHP 中,接口(Interface)就是这样的“合同”。👉 它规定:“任何想说自己‘支持我’的类,就必须实现我要求的方法!但它不告诉你这些方法具体怎么做。用interface// 定义一个“可缓存”的能力标准interface Cacheable // 可缓存接口接口里的方法必须是public。

2025-08-07 16:07:12 1035

原创 【PHP 抽象类完全指南(含 PHP 8.4 新特性)】

想象你是一家连锁店的总部,你不能直接“开店”,但你可以制定一套开店模板必须有店名必须有营业时间必须实现“开门”“关门”动作这个“模板”就是抽象类(abstract class)。abstract class 店铺 {// 这个类不能直接 new!// 它只是一个“模板”✅抽象类不能被实例化(不能new),只能被继承。这是 PHP 8.4 最大的新功能之一!类型语法子类必须实现?说明抽象类❌ 不能实例化只能被继承抽象方法✅ 必须实现无方法体抽象属性✅ 必须提供。

2025-08-06 15:54:14 738

原创 【PHP 继承与静态机制深度解析】

使用extends关键字,子类可以继承父类的 public 和 protected 成员(方法、属性、常量),实现功能复用。public function breathe() { echo "呼吸空气\n";public function bark() { echo "汪汪叫\n";// ✅ 继承自 Animal🔑 继承不是“复制粘贴”,而是一种“is-a”关系。建议说明✅ 优先使用static而不是self在静态方法中,尤其是父类方法✅ 静态属性用protected或private。

2025-08-06 14:00:21 1122

原创 【PHP 访问控制完全指南】

PHP 访问控制演进│├── PHP 7.1: 常量支持 public/protected/private├── PHP 8.0: 构造函数参数提升 (public $prop)├── PHP 8.2: readonly 属性└── PHP 8.4: 不对称可见性 (private(set), protected(set))└── set 不能比 get 宽└── private(set) 自动 final└── 两种写法:compact 与 block。

2025-08-05 09:21:12 803

原创 【PHP 构造函数与析构函数:从基础到高级的完整指南】

特性说明构造函数,PHP 8.0+ 支持属性提升参数默认值支持字面量和常量继承规则子类必须手动调用析构函数用于资源清理执行时机对象销毁时(脚本结束、unset、超出作用域)重要限制析构函数不能抛异常、不能有参数✅最佳实践使用构造器属性提升减少样板代码析构函数只用于资源清理(文件、数据库连接等)复杂对象创建使用静态工厂方法子类构造函数必须调用父类构造函数析构函数不要抛出异常,用日志记录错误🚀记住:构造函数是对象的"出生证明",析构函数是对象的"告别仪式",合理使用它们能让代码更健壮!

2025-08-01 15:29:27 494

原创 【PHP 自动加载机制详解】

当使用时,PHP自动帮你找到并包含对应的文件。// 传统写法// 自动加载:无需手动包含// PHP自动找 User.php特性说明推荐方式现代标准关键规则类名与文件名严格匹配调试技巧添加日志,使用✅最佳实践:使用 Composer 管理自动加载。

2025-08-01 15:12:10 410

原创 【PHP 类常量详解:从入门到精通】

类常量是类中定义的固定值,一旦定义就不能修改。// 圆周率// 自然对数的底为什么用类常量?避免"魔法数字"(如直接写 3.1415926)集中管理配置值提高代码可读性// ✅ 正确:类内部,方法外部// ❌ 错误:不能在方法内部定义// ❌ 错误版本关键特性PHP 5.6+支持表达式PHP 7.0+支持数组常量PHP 7.1+支持可见性控制PHP 8.1+支持对象常量PHP 8.3+支持C::{$name}动态访问✅核心要点用const定义,不能修改。

2025-08-01 14:30:05 216

原创 【PHP属性详解:从基础到只读的完全指南】

属性是类的变量,代表对象的状态或特征。类型化属性 (PHP 7.4+):给部件“定类型”避免属性乱装东西。从 PHP 7.4 起,可以明确属性的类型。只读属性 (PHP 8.1+):锁定部件让属性一旦初始化就不可更改。这是实现“不可变对象”的关键。 的精髓:引用 vs 内容 保护的是“引用”(指向哪里),不是“内容”(里面有什么)。总结: 保证“背包”和“传感器”不被替换,但允许往背包里装东西或给传感器升级。直接标记整个类为 。效果:所有声明的属性自动 ,并禁止创建动态属性。继承:

2025-07-31 14:50:31 577

原创 【PHP类的基础概念:从零开始学面向对象】

想象你要开一家机器人制造工厂。你需要一张“设计图纸”,上面画着机器人该有什么“部件”(比如名字、型号)和“功能”(比如行走、说话)。在 PHP 里,

2025-07-31 14:45:37 968

原创 【PHP 函数从入门到精通】

函数是将一段代码封装起来,方便重复使用的代码块。$name// 输出:Hello, Tomfunction是定义函数的关键字$name是参数是调用函数。

2025-07-25 14:54:35 980

原创 【PHP 流程控制完全指南】

结构用途是否返回值是否可跳出是否可跳过当前循环while条件循环❌✅ (break✅ (continuedo-while先执行后判断❌✅✅for已知循环次数❌✅✅foreach遍历数组❌✅✅ifelseelseif条件判断❌❌❌switch多值判断❌✅❌match多值匹配(PHP 8+)✅❌❌break结束循环或 switch❌✅❌continue跳过当前循环❌❌✅goto跳转到标签❌✅❌include包含文件❌❌❌require。

2025-07-21 13:56:16 761

原创 PHP 运算符详解:小白也能看懂的入门指南

类型常见操作符用途算术+ - * / %基础数学运算递增/递减++$a$a++--$a$a--控制变量增减字符串.=拼接字符串位运算`&^ ~ << >>`逻辑`&&错误控制抑制错误信息类型判断instanceof判断对象类型。

2025-07-18 16:38:44 341

原创 PHP常量详解:从入门到进阶(小白友好版)

/ 如 8.2.1// 8// 2// ❌ 致命错误:Cannot redeclare constant解决方法if (!常量类型定义方式作用域是否可变访问方式全局常量define()全局作用域❌NAME或\NAME命名空间常量define()指定命名空间❌\Ns\NAME类常量const类作用域❌静态属性类作用域✅。

2025-07-18 11:21:42 360

原创 PHP 变量从零开始讲明白(小白也能看懂)

PHP 的变量看似简单,但作用域、引用、静态变量、超全局变量等机制非常重要。掌握它们,才能写出健壮、稳定的代码。

2025-07-17 16:18:44 404

原创 《PHP 类型全解析 —— 小白也能看懂的类型总结》

PHP 的类型系统非常灵活又强大,既支持基本数据类型,也支持复杂的对象、枚举、交集/联合类型,还能通过类型声明提升代码的安全性和可读性。

2025-07-16 16:54:33 832

原创 从零开始理解 Composer 是如何实现自动加载的 —— 小白也能看懂的完整解析

class阶段步骤说明初始化1. 引入Composer 自动加载的起点2. 调用使用单例模式获取自动加载器├─ 子步骤 1:加载检查 PHP 环境├─ 子步骤 2:注册临时自动加载函数用于加载├─ 子步骤 3:实例化创建自动加载器核心对象├─ 子步骤 4:删除临时自动加载函数保持自动加载机制干净├─ 子步骤 5:加载获取命名空间、PSR-4 等规则└─ 子步骤 6:注册方法成为 PHP 的自动加载函数加载阶段3. PHP 触发自动加载当使用未定义类时自动调用4.被调用。

2025-06-20 15:54:24 968

原创 PHP 闭包函数、use、回调函数、bind 完整知识点手册

在闭包中使用外部变量时,必须用use把它带进来。回调函数是“被别人调用的函数”,你先定义好,等着别人来用。bind 是用来改变闭包的作用域绑定,让它可以访问某个类的私有或受保护成员。闭包是没名字的函数,回调是别人调用的函数,use 是把外面的变量带进闭包里,bind 是给闭包发通行证,让它能访问类的私密区域。

2025-06-19 15:02:23 993

原创 【如何一步步将自己的 PHP 包上传到 Packagist】

本文详细介绍了如何通过Composer创建、管理并发布PHP包到Packagist平台的完整流程。主要内容包括:1)Composer的国内安装与镜像设置;2)新建包的composer.json配置详解;3)将包上传到Gitee仓库的操作步骤;4)在Packagist绑定Git仓库的方法;5)常见问题的解决方案。通过这四个核心步骤,开发者可以快速掌握PHP包的发布流程,使自己的代码能够被其他人通过composer require轻松安装使用。文章特别针对国内开发者提供了网络优化建议和常见错误排查指南。

2025-06-13 10:43:00 1042

原创 微信模板消息

1.微信公众号平台设置模板消息,获取模板ID 和字段。

2025-03-06 15:29:18 176

原创 微信扫码登陆获取unionid

1.准备工作 登陆微信开放平台,申请对应的应用,获取AppID,AppSecret;

2025-01-21 10:18:15 396

原创 微信分账详情

获取商户号和开发者ID,并开启分账。分账完成后会收取万分之五四的手续费。

2024-07-26 15:42:21 802

原创 微信jsap支付

1.微信公众平台 设置域名关联对应的商户2.微信商户平台配置授权目录1.获取appid key 商户号 支付密钥2.配置url路径(微信公众号及微信商户平台都需要配置)<?php require_once ( dirname(__FILE__).'/wxpay/WxPay.Api.php' );require_once ( dirname(__FILE__).'/wxpay/WxPay.JsApiPay.php' );require_once ( dirname(__FILE__

2024-07-26 15:38:05 501

原创 【获取微信openId】

在微信公众平台 设置对应的域名。

2024-07-19 14:51:00 618

原创 phpstudy +phpstrom 配置xdebug

1.打开phpstrom---->settings---->Languages & Frameworks—>PHP。5.下载对应的xdebug扩展,并配置php.ini。4.点击下拉框 设置对应的域名。3.设置xdebug端口号。2.选择对应的php版本。

2024-05-13 17:59:40 313 1

原创 this is incompatible with sql_mode=only_full_group_by

【代码】执行sql语句报错 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘

2024-05-09 15:46:04 293 1

原创 docker

基本命令镜像基本命令容器基本命令容器其他命令提交镜像(容器->镜像)容器数据卷挂载匿名挂载,居名挂载数据卷容器DockerFile初识dockerfile基本命令示例发布镜像dockerHub阿里云镜像服务267: eth0@if268: 268(容器端): veth4f25563@if267(docker0)是对应得,通过veth 进行交互

2022-11-11 17:01:34 305 1

原创 【redis集群报错】

1,redis-cli--clustercheck123.57.186.1606379//检查集群查看报错。3,clustersetslot4807stable//迁移对应的槽。2,redis-cli-c-p7005进入对应节点。

2022-07-25 17:37:13 480

原创 【golang操作数据库】

golang操作数据库前期工作链接操作数据库前期工作 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx链接操作数据库package main import( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx")type Test struct{

2022-03-31 17:16:19 768

原创 go语言基础

什么是指针指针的变量指向变量的内存地址定义指针var ip *int使用指针使用指针取值package main //定义包名import( "fmt")func main(){a:=100//定义变量var pt * int //定义指针pt=&a //变量的内存地址赋值给指针 定义指针和赋值可写为 pt:=&afmt.Println(a)//输出100fmt.Println(pt)//输出a的内存地址fmt.Println(*pt)//输出100}

2022-02-10 13:41:35 509

原创 go语言的hello wrold

go语言的hello wroldgo环境安装hello worldgo环境安装安装包下载地址为:https://golang.org/dl/如果打不开可以使用这个地址:https://golang.google.cn/dl/。解压到相关目录tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz配置环境变量vim etc/profile//文件目录GO_HOME=/usr/local/goexport PATH=$PATH:$GO_HOM

2022-01-29 16:26:32 558

原创 redis主从复制,哨兵,集群

集群主从复制1,开启对应的端口2,修改redis.conf (多个服务器无需配置)复制配置文件cp /etc/redis.conf redis6380.conf//端口号port 6380修改新的pid文件路径pidfile “/var/run/redis_6380.pid”指定新的日志文件路径logfile “/var/log/redis/redis_6380.log”#指定新的数据文件路径dir /data/redis/redis6380/data/指定新的转储文件路径db

2021-12-21 15:29:37 537

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除