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

Webmozart Assert:PHP类型安全的强力守卫

Webmozart Assert

Webmozart Assert 是一个高效的 PHP 断言库,专门用于验证方法的输入和输出。通过使用这个库提供的断言功能,你可以显著减少编写安全实现所需的代码量。

所有在 Assert 类中的断言方法,在验证失败时都会抛出一个 Webmozart\Assert\InvalidArgumentException 异常。

功能特性

  • 丰富的断言方法:提供超过 100 种断言方法,涵盖字符串、整数、数组、对象等各种类型检查
  • 空值和集合验证:每个基础断言都有对应的 nullOr*all*allNullOr* 变体
  • 友好的错误消息:提供一致且可读的错误消息格式,支持自定义消息
  • 类型安全:与 PHPStan 和 Psalm 等静态分析工具良好集成
  • 高性能:专为高效验证设计,减少运行时开销
  • 严格的类型声明:全面支持 PHP 8.2+ 的严格类型模式

安装指南

使用 Composer 进行安装:

composer require webmozart/assert

系统要求:

  • PHP 8.2 或更高版本
  • ext-ctype 扩展

使用说明

基础使用

use Webmozart\Assert\Assert;class Employee
{public function __construct($id){Assert::integer($id, 'The employee ID must be an integer. Got: %s');Assert::greaterThan($id, 0, 'The employee ID must be a positive integer. Got: %s');}
}

如果使用无效的 ID 创建员工,将会抛出异常:

new Employee('abc'); // 抛出 InvalidArgumentException: The employee ID must be an integer. Got: string

自定义错误消息

Assert::string($path, 'The path is expected to be a string. Got: %s');

空值检查变体

// 允许 null 值的字符串检查
Assert::nullOrString($nullableValue);// 检查数组中的所有元素都是字符串
Assert::allString($stringArray);

核心代码

Assert 类核心方法

/*** 验证值是否为字符串** @psalm-pure* @psalm-assert string $value** @throws InvalidArgumentException*/
public static function string(mixed $value, string $message = ''): string
{if (!\is_string($value)) {static::reportInvalidArgument(\sprintf($message ?: 'Expected a string. Got: %s',static::typeToString($value)));}return $value;
}/*** 验证值是否为非空字符串** @psalm-pure* @psalm-assert non-empty-string $value* @psalm-return non-empty-string** @throws InvalidArgumentException*/
public static function stringNotEmpty(mixed $value, string $message = ''): string
{static::string($value, $message);static::notEq($value, '', $message);return $value;
}/*** 验证值是否为整数** @psalm-pure* @psalm-assert int $value** @throws InvalidArgumentException*/
public static function integer(mixed $value, string $message = ''): int
{if (!\is_int($value)) {static::reportInvalidArgument(\sprintf($message ?: 'Expected an integer. Got: %s',static::typeToString($value)));}return $value;
}

Mixin 特性(提供变体方法)

/*** 允许 null 值的字符串检查** @psalm-pure* @psalm-assert string|null $value** @return string|null** @throws InvalidArgumentException*/
public static function nullOrString(mixed $value, string $message = ''): mixed
{null === $value || static::string($value, $message);return $value;
}/*** 检查可迭代对象中的所有元素都是字符串** @psalm-pure* @psalm-assert iterable<string> $value** @return iterable<string>** @throws InvalidArgumentException*/
public static function allString(iterable $value, string $message = ''): iterable
{static::isIterable($value);foreach ($value as $entry) {static::string($entry, $message);}return $value;
}/*** 检查可迭代对象中的所有元素都是字符串或 null** @psalm-pure* @psalm-assert iterable<string|null> $value** @return iterable<string|null>** @throws InvalidArgumentException*/
public static function allNullOrString(?iterable $value, string $message = ''): ?iterable
{static::isIterable($value);foreach ($value as $entry) {null === $entry || static::string($entry, $message);}return $value;
}

自定义异常类

/*** 断言失败时抛出的异常类*/
class InvalidArgumentException extends \InvalidArgumentException
{
}

JbAoGqoaBS++GdInsG1ZjhkQ+XNf4K6cuOFLWlgLc0s=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.gsyq.cn/news/194637.html

相关文章:

  • Golang 智能体LLM调用开发
  • 深度学习毕设项目:基于卷积神经网络的垃圾图像分类系统研究与实现
  • win11禁止自动更新,永久关闭win11自动更新工具,win10/11永久关闭系统自动更新
  • 4.2 ChatGPT JSON Mode 实战:结构化输出让AI回答更易于程序处理
  • 7.2 选择你的开发利器:Operator SDK vs Kubebuilder全方位对比
  • 第9章 语言级自我改进:Reflexion 与记忆机制
  • 6.2 智能故障诊断系统:基于LLM的K8s问题定位与解决方案推荐
  • 深度学习毕设选题推荐:基于 LSTM 模型的古诗词自动生成算法实现及系统实现
  • 学长亲荐!8个一键生成论文工具测评:研究生开题报告写作全攻略
  • ctf.show-路径遍历突破
  • 在MATLAB中基于深度学习预测NASA涡扇发动机剩余使用寿命
  • django基于大数据的旅游景区推荐系统_juj13-爬虫可视化
  • 【计算机毕业设计案例】基于ManTra-Net的图像篡改检测方法研究与应用实现
  • 计算机深度学习毕设实战-基于 LSTM 模型的古诗词自动生成算法实现及系统实现
  • 【计算机毕业设计案例】基于人脸识别的发型推荐系统代码实现
  • 【卿璃】蚀
  • Transformer搞定康复动作识别,效率翻倍
  • 探索MATLAB/Simulink 2021b中的直流微电网世界
  • RAG从入门到精通(十五)——高级RAG范式 - 指南
  • MATLAB 下基于多尺度总变分方法的高光谱图像分类探索
  • 鲁棒性约束示例
  • 【毕业设计】基于ManTra-Net的图像篡改检测方法研究与应用实现
  • 计及风光不确定性的基于IGDT信息间隙决策的综合能源系统优化调度
  • django基于hadoop的零食大礼包商城销售大数据分析及可视化系统 echart_86990-爬虫可视化
  • 麻雀算法及其改进在机械臂轨迹规划中的应用探索
  • django基于Python的电商用户的数据行为分析与可视化 爬虫
  • Ubuntu数字键盘失灵问题解决
  • 探索区域综合能源系统(RIES)优化:从模型到Matlab实现
  • AHK调试报错: An internal error has occurred in the debugger engine解决方法
  • 【数字信号去噪】基于matlab改进的蜣螂算法优化变分模态分解IDBO-VMD数字信号去噪(优化K值 alpha值 综合指标 适应度函数包络熵)【含Matlab源码 14808期】