从入门到精通:PHP 7.4中public、protected、private的实战应用场景全解析

第一章:PHP 7.4类型属性可见性概述

PHP 7.4 引入了对类属性的类型声明支持,这一特性极大地增强了代码的可读性和健壮性。开发者现在可以在定义类属性时明确指定其数据类型,同时结合访问修饰符控制属性的可见性,从而实现更严格的封装与类型安全。

类型属性的基本语法

在 PHP 7.4 中,类属性可以使用 public、protected 或 private 修饰符,并结合类型声明来定义。支持的类型包括标量类型(如 string、int)、复合类型(如 array、callable)以及自定义类类型。
// 定义具有类型和可见性的类属性
class User {
    public int $id;
    protected string $name;
    private ?array $metadata;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
        $this->metadata = null;
    }
}
上述代码中,$id 为公共整型属性,$name 为受保护字符串属性,$metadata 为私有可空数组。构造函数确保初始化时符合类型约束。

可见性修饰符的作用范围

不同修饰符决定了属性在类内外的访问权限:
  • public:可在任何地方访问
  • protected:仅限类自身及其子类访问
  • private:仅限定义该属性的类内部访问
修饰符类内可访问子类可访问外部可访问
public是是是
protected是是否
private是否否
此机制有助于防止意外的数据修改,提升面向对象设计的安全性与清晰度。

第二章:public关键字的理论与实践应用

2.1 public属性的基本语法与作用域解析

在面向对象编程中,`public` 是最宽松的访问修饰符,用于声明类成员(字段、方法、构造函数等)对外部完全可见。任何外部类或对象均可直接访问 `public` 成员。
基本语法示例

public class User {
    public String name;
    public void displayName() {
        System.out.println("Name: " + name);
    }
}
上述代码中,`name` 字段和 `displayName()` 方法均被声明为 `public`,意味着它们可在任意包中的其他类中被实例化后直接调用。
作用域特性
  • 跨类访问:同一包或其他包中的类可通过对象实例访问 public 成员;
  • 无包限制:与默认(包私有)或 `private` 不同,`public` 成员可被所有外部单元访问;
  • 继承可见性:子类无论是否在同一包中,均可继承并访问父类的 public 成员。

2.2 在数据封装中合理使用public的场景分析

在面向对象设计中,public成员的使用需谨慎权衡封装性与可用性。某些场景下,公开接口是实现组件交互的关键。
公共API的设计
当类作为服务提供者时,public方法暴露必要功能。例如Go语言中的配置读取器:

type Config struct {
    Host string
    Port int
}

func (c *Config) GetAddress() string {
    return c.Host + ":" + strconv.Itoa(c.Port)
}
其中Host和为public字段,便于外部直接初始化;GetAddress为public方法,供调用方获取完整地址。这种设计在配置结构体中广泛采用,提升易用性。
合理的公开时机
  • 框架扩展点:允许用户注册自定义处理器
  • 数据传输对象(DTO):需序列化字段必须公开
  • 工具类方法:通用函数如日志、编码等

2.3 构建API接口时public属性的实战设计

在设计RESTful API时,合理使用public属性能提升接口的可访问性与灵活性。应避免直接暴露内部字段,而是通过DTO(数据传输对象)控制输出。
安全的数据封装示例

type UserResponse struct {
    ID    uint   `json:"id"`
    Name  string `json:"name"`
    Email string `json:"-"` // 敏感字段屏蔽
}
该结构体通过tag控制JSON序列化,Email字段标记为"-",防止意外暴露,确保public属性仅输出授权信息。
字段可见性控制策略
  • 使用小写字母开头的字段限制包外访问
  • 导出字段配合结构体标签实现动态过滤
  • 结合中间件统一处理响应数据脱敏

2.4 public与自动文档生成工具的协同应用

在Go语言中,以大写字母开头的标识符(如函数、结构体、变量)会被导出为`public`,这是自动文档生成工具(如`godoc`)识别公共API的基础。通过合理使用`public`标识,开发者能精准控制哪些内容被纳入生成的文档中。
文档生成流程
当运行`godoc`或集成到VS Code等编辑器时,工具会扫描所有`public`成员并提取前置注释:

// UserService 提供用户相关的业务逻辑
type UserService struct {
    DB *sql.DB
}

// GetUserByID 根据ID查询用户信息
// 返回用户对象和可能的错误
func (s *UserService) GetUserByID(id int) (*User, error) {
    // 实现细节
}
上述代码中,`UserService`和`GetUserByID`均为`public`,其上方的注释将被`godoc`解析为文档内容。注释应使用完整句子,明确描述功能、参数与返回值。
最佳实践建议
  • 所有`public`类型和函数必须附带清晰注释
  • 避免导出不必要的内部实现细节
  • 利用注释格式化支持(如代码块、链接)提升可读性

2.5 性能考量下public属性的优化策略

在高性能系统设计中,直接暴露的 public 属性虽提升访问效率,但可能引发数据一致性与内存开销问题。合理优化需权衡可访问性与运行时性能。
延迟初始化策略
对于开销较大的 public 字段,可采用惰性加载模式减少初始化负担:

type Service struct {
    data *HeavyResource
}

func (s *Service) GetData() *HeavyResource {
    if s.data == nil {
        s.data = NewHeavyResource() // 延迟创建
    }
    return s.data
}
该模式将资源创建推迟至首次访问,降低启动开销。GetData 方法封装了 public 属性的获取逻辑,兼顾控制力与性能。
并发访问优化
多协程环境下,频繁读写 public 属性需引入同步机制。使用读写锁可显著提升读密集场景性能:
  • RWMutex 降低读操作竞争
  • 原子操作适用于简单类型(如 int32)
  • 避免在热路径中调用 mutex.Lock()

第三章:protected关键字的核心机制与应用

3.1 protected属性的继承规则深入剖析

在面向对象编程中,`protected` 属性介于 `private` 与 `public` 之间,具有特殊的访问控制语义。它允许子类访问父类的成员,但禁止外部直接调用。
继承中的可见性表现
`protected` 成员在子类中可被正常访问,但在类外不可见。这一特性支持封装的同时促进代码复用。
Java 示例说明

class Parent {
    protected int value = 10;
}

class Child extends Parent {
    public void display() {
        System.out.println(value); // 合法:子类可访问 protected 成员
    }
}
上述代码中,`Child` 类通过继承获得对 `value` 的访问权限。`protected` 打破了 `private` 的严格限制,又避免了 `public` 的过度暴露,适用于需在继承链中共享但不对外开放的场景。

3.2 基于protected实现安全的数据共享模式

在面向对象设计中,`protected` 成员既避免了 `private` 的过度封闭,又防止了 `public` 的无限制访问,是构建安全数据共享机制的理想选择。
继承链中的可控数据暴露
通过将关键字段设为 `protected`,基类可允许子类访问核心数据,同时阻止外部直接操作,保障封装性。

public class Account {
    protected BigDecimal balance;

    public Account(BigDecimal initial) {
        this.balance = initial;
    }
}
class SavingsAccount extends Account {
    public void addInterest(BigDecimal rate) {
        this.balance = this.balance.multiply(rate.add(BigDecimal.ONE));
    }
}
上述代码中,`balance` 被定义为 `protected`,`SavingsAccount` 可安全继承并操作余额,但外部类无法直接修改,防止非法篡改。
设计优势与适用场景
  • 支持多层继承结构中的数据传递
  • 增强模块化,降低耦合度
  • 适用于框架设计中核心状态的受控暴露

3.3 在抽象类与模板方法模式中的典型应用

在面向对象设计中,抽象类常与模板方法模式结合使用,以定义算法骨架并延迟具体步骤的实现。
模板方法的核心结构
模板方法模式通过在抽象类中定义一个或多个抽象操作,由子类实现,从而实现行为的扩展。该模式将不变的行为搬移到父类,去除子类中的重复代码。

abstract class DataProcessor {
    // 模板方法,定义流程骨架
    public final void process() {
        load();
        validate();
        parse();
        save();  // 可选钩子方法
    }

    protected abstract void load();
    protected abstract void validate();
    protected abstract void parse();

    protected void save() {
        System.out.println("Default saving behavior");
    }
}
上述代码中,process() 方法为模板方法,封装了数据处理的通用流程。load、validate、parse 为抽象方法,由具体子类实现;save() 为钩子方法,提供默认行为可被重写。
实际应用场景
该模式广泛应用于框架设计,如Spring的JdbcTemplate、各类解析器等,提升代码复用性与可维护性。

第四章:private关键字的封装艺术与工程实践

4.1 private属性的作用域限制与访问控制

在面向对象编程中,`private` 属性用于限制成员变量或方法仅在定义它们的类内部可访问,外部无法直接调用或修改。
访问控制的实际效果
私有属性增强了封装性,防止外部误操作导致状态不一致。例如在Go语言中:

type User struct {
    name string  // 私有字段(包内可见)
    age  int     // 同上
}

func (u *User) SetAge(a int) {
    if a > 0 {
        u.age = a
    }
}
上述代码中,`age` 字段不可被外部直接赋值,必须通过 `SetAge` 方法进行受控修改,确保逻辑完整性。
作用域对比
修饰符类内访问子类访问包外访问
private✔️❌❌
protected✔️✔️❌
public✔️✔️✔️

4.2 利用private实现高内聚的类设计原则

高内聚的类设计强调将相关数据和行为封装在一起,而 `private` 访问修饰符是实现这一目标的核心机制。通过限制外部直接访问内部成员,可有效防止状态被非法篡改。
封装核心状态
将字段设为 `private` 能确保只有类自身的方法可以修改其状态,提升数据安全性。

public class BankAccount {
    private double balance;

    private void validateAmount(double amount) {
        if (amount < 0) throw new IllegalArgumentException();
    }

    public void deposit(double amount) {
        validateAmount(amount);
        balance += amount;
    }
}
上述代码中,`balance` 和 `validateAmount` 均为私有成员,外部无法绕过校验逻辑直接操作余额,保障了业务规则的一致性。
职责集中化
  • 私有方法仅服务于类内部逻辑,避免暴露辅助功能
  • 所有状态变更路径可控,便于调试与维护
  • 降低模块间耦合,增强可测试性

4.3 防止外部篡改:private在敏感数据处理中的应用

在面向对象编程中,private 关键字是封装机制的核心工具之一,用于限制类成员的访问权限,防止外部直接读写敏感数据。
私有字段的安全价值
将关键数据声明为 private 可有效阻止非法访问。例如,在用户账户类中:

public class BankAccount {
    private double balance;

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public double getBalance() {
        return balance;
    }
}
上述代码中,balance 被设为私有,外部无法直接修改。所有变更必须通过受控方法(如 deposit)进行,确保逻辑校验始终生效。
访问控制对比
访问修饰符本类可访问子类可访问外部类可访问
private是否否
protected是是否
public是是是
通过合理使用 private,系统可在数据入口处建立安全屏障,显著降低外部篡改风险。

4.4 编译时检查与IDE支持下的private最佳实践

在现代开发中,编译时检查与IDE的静态分析能力显著提升了对private成员的管理效率。通过合理使用访问控制,可提前暴露设计缺陷。
编译期安全验证

public class UserService {
    private String authToken;
    
    private void refreshToken() {
        // 仅内部调用
    }
}
上述代码中,authToken和refreshToken()被声明为private,编译器会阻止外部类直接访问,确保封装性。
IDE智能提示辅助重构
主流IDE(如IntelliJ IDEA、VS Code)能识别private作用域,提供:
  • 未使用私有成员的警告
  • 自动提取方法建议
  • 安全的重命名与内联操作
结合编译时检查与IDE支持,应始终优先将字段设为private,并通过显式getter暴露必要接口,实现高内聚、低耦合的设计目标。

第五章:总结与面向未来的可见性设计思考

可观测性体系的持续演进
现代分布式系统对可见性提出了更高要求。企业不再满足于被动告警,而是追求根因预判能力。例如,某金融平台通过引入 eBPF 技术,在内核层捕获系统调用链,结合 OpenTelemetry 收集的 traces,构建了零侵入的服务行为画像。
  • 指标(Metrics)用于宏观趋势分析
  • 日志(Logs)提供具体执行上下文
  • 追踪(Traces)还原请求全链路路径
  • 事件流(Events)支持实时决策响应
基于语义增强的数据关联
单纯聚合数据已不够,需注入业务语义。以下代码展示了如何在 Go 服务中为 trace 注入订单上下文:

ctx, span := tracer.Start(ctx, "processOrder")
span.SetAttributes(
    attribute.String("order.id", orderID),
    attribute.Int("user.tier", 3),
)
defer span.End()

// 业务逻辑...
智能基线与异常检测
静态阈值告警误报率高,动态基线更适应流量波动。某电商系统采用 Prometheus + ML 模型,每日自动生成各接口 P95 延迟预测区间,异常检测准确率提升至 92%。
方法响应延迟敏感度配置复杂度
固定阈值低低
滑动窗口均值中中
季节性 ARIMA 模型高高
未来架构中的可解释性需求
随着 AI 驱动的运维决策普及,系统必须输出“为何判定为异常”的推理路径。这要求 trace 数据不仅记录调用关系,还需携带决策权重标签,供审计与模型优化使用。
centos7安装php7.4 https://blog.csdn.net/muwenbofx/article/details/115152340?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-115152340-blog-126500429.235%5Ev38%5Epc_relevant_sort_base1&depth_1-utm_source=distribute.pc 阅读详情

相关推荐

php public protected private属性实例详解

php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰。 public 表示全局,类内部外部子类都可以访问;private 表示私有的,只有本类内部可以使用;protected 表示受保护的,只有本类或子类或父类中可以访问; //父类class father{ public function a(

z_qifa的博客 709

PHP中private什么意思,PHP中的private和public还有protected的区别

最近H5项目繁忙,没空写PHP的学习心得。今天补上:在接触PHP的最开始,我首先是看了PHP的源代码,PHP的源代码大致分四层:SAPI:接口层、main业务层、zend、以及扩展层EXT;这就是我对它的一个印象;废话少说,PHP中private和public还有protected的区别:顾名思义,如果你有记得高中英语,那么就很容易理解这三个单词的意思了,①:public 表示全局,类内部外部子类...

weixin_26833205的博客 2050

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6656

Window10安装PHP7.4

首先需要下载PHP 7的安装包,可以从PHP官网(https://www.php.net/downloads.php)或者Windows下的PHP官网(http://windows.php.net/download/)下载Windows版本的PHP 7安装包。根据自己的系统架构(32位或64位)选择下载,下载后解压到一个路径下。在PHP目录中找到php.ini-development文件,将其重命名为php.ini,并且进行修改。将PHP安装的路径(比如C:\php)添加到环境变量中。

南巷清风 7977

第18届全国大学生智能汽车竞赛四轮车开源讲解【2.5】-- 图像处理实战:从二值化到边缘检测的工程优化

本文深入讲解了第18届全国大学生智能汽车竞赛四轮车开源项目中图像处理的核心实战技术。文章聚焦于二值化与边缘检测两大关键环节,详细对比了大津法与索贝尔算子的工程应用与优化策略,并分享了遮光、偏振片等物理抗干扰技巧,旨在帮助参赛者构建稳定高效的图像预处理流水线,为赛道识别奠定坚实基础。

weixin_29279047的博客 100

银河麒麟V10ARM架构服务器离线安装docker\nacos【附安装包】

本文分享了在银河麒麟ARM64操作系统上安装Docker和Nacos的完整过程。首先提供了Docker的自动化安装脚本,包含服务配置、存储路径设置等关键步骤,并给出了常用维护命令。接着详细介绍了通过Docker-compose部署Nacos的方法,包括镜像导入、配置文件修改、鉴权设置等注意事项,特别强调了密钥长度必须超过32个字符的要求。文章还提供了Nacos初次登录的注意事项,并预告了后续可能推出的Redis、Nginx等安装教程。所有配置文件和脚本均可直接下载使用,适合内网环境下国产操作系统的部署

weixin_39054697的博客 2344

PHP中private、public、protected的区别详解

先简单粗俗的描述下:public 表示全局,类内部外部子类都可以访问;private表示私有的,只有本类内部可以使用;protected表示受保护的,只有本类或子类或父类中可以访问; 再啰嗦的解释下: 一、 public: 公有类型 在子类中可以通过 self::属性名(或方法名)调用public方法或属性,parent::方法名 调用父类方法 在实例中可以能过 $obj->属...

weixin_30892037的博客 215

Ubuntu22环境下Xinference与RAGFLOW集成:构建高效rerank模型服务【实战指南】

本文详细介绍了在Ubuntu22.04系统上,通过部署Xinference模型推理服务来加载bge-reranker-base等rerank模型,并将其与RAGFLOW框架集成的完整实战指南。该方案实现了模型服务的解耦与灵活管理,有效提升RAG系统的检索精度与答案相关性,并提供了从环境配置、服务启动、网络连接到性能调优及常见问题排查的全流程解决方案。

pluto的博客 500

属性封装的最佳实践,PHP 7.4中public、protected、private到底怎么选?

掌握PHP 7.4类型属性可见性,合理选择public、protected、private提升代码安全性与可维护性。详解各类可见性的适用场景与封装原则,帮助开发者规避数据暴露风险,实现高效类设计。最佳实践指南,值得收藏。

ProceNest的博客 616

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6808

Harmony:C# 动态代码补丁的5大秘密武器

Harmony 是一个开源库,它允许你在运行时修改托管代码(即使用 .NET 或 Mono 编译的语言编写的应用程序)。它通过利用 AOP(面向切面编程)的思想,可以在不重新编译代码的情况下添加、替换或修改方法的行为。这对于游戏模组(Modding)、插件开发以及调试工具非常有用。安装 Harmony要使用 Harmony,你需要首先安装它。Harmony 作为一个 NuGet 包,可以直接通过 Visual Studio 的 NuGet 包管理器进行安装。安装步骤打开 Visual Studio。

java专栏 1191

PHP中public,private,protected,abstract等关键字的用法

public 权限最大,既可以让子类使用,也可以支持实例化之后的调用。 protected 表示的是受保护的,访问的权限是只有在子类和本类中才可以被访问到。 private 表示的是私有,只能够是在当前的类中可以被访问到。 static static的作用就是能够实现值或者方法在类中不需实例化的情况下调用,同时static修饰的变量具有与值存储的功能,例如我们不使用static运行的结果如下,可以...

阳水平的博客 1583

SCTPPortScan SCTP协议端口扫描、关联地址识别、传输状态检测

Windows:Winsock2+SCTP扩展)。- **SCTP API封装**:Linux下直接调用`socket()`、`connect()`、`getsockopt()`等系统函数,解析`struct sctp_status`和`struct sctp_paddrinfo`获取状态和关联地址。qDebug() << "开始SCTP扫描:" << ipList.size() << "个IP," << ports.size() << "个端口,共" << m_totalTasks << "个任务";

寒寒豆豆软件公司的博客 91

public protected private 三种权限区别

public protected private三种权限的区别总结: public(公有) protected(受保护) private(私有) 外部 Y N N 子类中 Y Y N 本类中 Y Y Y

清风自来 3059

[工作流节点24] 外部用户审批的实现方式:让客户、供应商也能参与流程决策

摘要: 明道云支持通过三种方式实现外部用户审批:1)外部表单审批(推荐方案),通过公开表单让外部用户提交审批意见并自动触发流程;2)链接参数审批,通过含参数的URL实现一键确认;3)API/Webhook审批,适用于系统集成场景。三种方案均无需外部用户登录,支持记录操作日志和安全审计。典型应用包括客户确认报价、供应商发货确认等,实现内外流程无缝衔接。建议根据业务复杂度选择:无代码需求用外部表单,轻量审批用链接参数,系统对接用Webhook。

每日出拳老爷子的博客 347

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

php class中public,private,protected的区别,以及实例

一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等。 protected: 受保护类型,用于本类和继承类调用。 private: 私有类型,只有在本类中使用。 二,实例 查看复制打印? error_reporting(E_ALL);      class test{  

霸气工作室 1470

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PHP中const,static,public,private,protected的区别

原文地址:http://small.aiweimeng.top/index.php/archives/54.html const: 定义常量,一般定义后不可改变 static: 静态,类名可以访问 public: 表示全局,类内部外部子类都可以访问; private: 表示私有的,只有本类内部可以使用; protected: 表示受保护的,只有本类或子类或父类中可以访问; 定义常量也可用def...

neddiepeng的博客 822

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PHP类中的访问修饰public, protected, private以及误解

在PHP的类中可以使用public, protected, private来修饰成员属性和成员方法。 权限从大到小:public > protected > private public: 本类/对象,子类/对象 可以访问 protected: 本类,子类 可以访问。 private: 本类可以访问。 特别注意: 很多人总结说父类可以访问子类,其实这是错误的,继承是单向的,父类...

猛犸象 1138

PHP类中public、private和protected的区别

在PHP中,如果在属性和方法前如果不加public、private或者protected修饰词,默认是使用public。 public:本类、子类和类外部都可以访问; private:只在本类中可以访问,子类和外部都不可以访问; protected:本类和子类中可以访问,类外部不能访问; 例如: class Father { public $name = 'lily'; private $ag...

来自火星的coder 2860

php5中三种数据类型的区别 public private protected

<br />public: 公有类型<br />    在子类中可以通过self::var 来调用 public类型的方法或属性 可以通过parent::method 来调用父类中的方法<br />    在实例中可以能过$obj->var 来调用 public类型的方法或属性<br />protected: 受保护类型<br />        在子类中可以通过self::var 来调用 protected类型的方法或属性 可以通过parent::method 来调用父类中的方法<br /> 在实例中不能

小哈咪 1191

php class中public,private,protected,static的区别,以及实例

一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等。 protected: 受保护类型,用于本类和继承类调用。 private: 私有类型,只有在本类中使用。 二,实例 &lt;?php   error_reporting(E_ALL);      class test{    public $public;    ...

qq_38085855的博客 668

php public private protected 修饰词

php的public、protected、private三种访问控制模式的区别   public: 公有类型         在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法     在实例中可以能过$obj-&gt;var 来调用 public类型的方法或属性 protected: 受保护类型         在子类中可以通过self::va...

KobeHoo的博客 207
上一篇: PHP 8.3中动态属性的属性详解(从弃用到严格模式的演进之路)
下一篇: 你还在手动写测试数据?Laravel 10种 Faker用法让你秒填千条记录
PixelFlow
博客等级 码龄1年 180粉丝 2207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值