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

PHP常量与枚举定义最佳实践

PHP常量与枚举定义最佳实践

常量和枚举用于定义固定不变的值。PHP8.1引入的枚举让常量管理更规范。今天说说常量和枚举的用法。

PHP常量用define或const定义。

```php
define('APP_NAME', 'MyApp');
define('APP_VERSION', '1.0.0');
define('MAX_UPLOAD_SIZE', 10 * 1024 * 1024);

const DB_HOST = 'localhost';
const DB_PORT = 3306;
const API_TIMEOUT = 30;

echo APP_NAME . "\n";
echo DB_HOST . "\n";
?>

类常量用const定义。

```php
class User
{
const STATUS_ACTIVE = 'active';
const STATUS_INACTIVE = 'inactive';
const STATUS_BANNED = 'banned';

const ROLES = ['admin', 'editor', 'user'];

public const MAX_LOGIN_ATTEMPTS = 5;
private const SALT_LENGTH = 32;
}

echo User::STATUS_ACTIVE . "\n";
echo User::MAX_LOGIN_ATTEMPTS . "\n";
?>

PHP8.1枚举。

```php
enum OrderStatus: string
{
case Pending = 'pending';
case Paid = 'paid';
case Shipped = 'shipped';
case Delivered = 'delivered';
case Cancelled = 'cancelled';

public function label(): string
{
return match ($this) {
self::Pending => '待支付',
self::Paid => '已支付',
self::Shipped => '已发货',
self::Delivered => '已签收',
self::Cancelled => '已取消',
};
}

public function isActive(): bool
{
return $this !== self::Cancelled;
}
}

$status = OrderStatus::Paid;
echo $status->label() . "\n";
echo $status->isActive() ? '活跃' : '不活跃' . "\n";

// 从数据库值创建
$dbStatus = 'paid';
$status = OrderStatus::from($dbStatus);
echo $status->label() . "\n";
?>

常量数组的定义。

```php
const CONFIG = [
'database' => ['host' => 'localhost', 'port' => 3306],
'redis' => ['host' => 'localhost', 'port' => 6379],
];

define('ERROR_MESSAGES', [
400 => '错误请求',
401 => '未授权',
404 => '未找到',
500 => '服务器错误',
]);

echo ERROR_MESSAGES[404] . "\n";
?>

常量和枚举的使用原则。常量用于不变的值如配置、状态码。枚举用于有限的一组选项如订单状态、用户角色。枚举比常量更安全,因为类型检查可以确保只使用有效的值。

http://www.jsqmd.com/news/980035/

相关文章:

  • 告别混乱!用APDL批处理模式高效管理你的ANSYS仿真工作流
  • 计算机毕业设计之基于Hadoop1688平台数据的分析与可视化
  • 深耕技术,赋能增长 —— 为何企业 GEO 优化首选好客搜智搜 GEO 系统
  • C++控制台版宾馆客房管理系统源码(含完整报告与编译说明)
  • RK3588 Android12开发:如何高效管理自定义分支并与官方SDK同步(避坑指南)
  • 模电课设别再头疼了!手把手教你用LM358和滑动变阻器搞定水位检测报警电路
  • 【LeetCode刷题日记】78.子集
  • 树莓派4B不只是控制器:一机搞定Matter设备固件编译与调试全流程
  • 从MobileNet到CoAtNet:聊聊那些年我们追过的轻量级网络设计思路
  • 告别C盘爆满!手把手教你将Qt5.12.6完整安装到D盘(Win10环境,含环境变量检查)
  • 2026降AIGC软件实测:10款软件对比,学术合规技巧盘点
  • 低代码平台架构演进:从 Schema 驱动到 AI 生成式 UI 的工程化方案
  • 从‘信息检索’视角拆解Transformer Attention:你的Query如何找到最相关的Key与Value?
  • MuleSoft+LLM企业级AI编排:构建可审计、可治理、高韧性的智能工作流
  • 从FM收音机到5G基站:正交解调这个‘老’技术,为啥今天依然离不开它?
  • 2026特斯拉贴膜怎么选?十大窗膜品牌横评智驾信号兼容全攻略 - 资讯焦点
  • 从Euromap 63文件传输到OPC UA实时数据流:一个驱动组件如何简化注塑机IIoT架构?
  • 保姆级教程:用Python手写A*算法,5分钟搞定扫地机器人最短路径规划
  • 同一段 Prompt 跑 5 个大模型,输出差异让我重新审视模型选型
  • EarlyStopping救了我的GPU:一个Kaggle竞赛中的真实省时故事
  • 儿童护眼灯哪个最好?盘点常年霸榜儿童护眼灯售罄王,好用还不贵
  • 2025-2026年北京十大装修公司推荐:十大排行评测别墅设计避光污染特点市场份额 - 品牌推荐
  • PCIe 4.0实战避坑指南:从带宽计算到信号完整性,硬件工程师必须搞懂的几个关键点
  • 2026淮安代理记账收费标准最新整理,淮安老板看这篇不花冤枉钱 - 淮安财税咨询
  • 现场五招验苗技巧,不用专业设备筛选优质鱼苗
  • 宁波市黄金回收本地靠谱店铺指南+白银回收+铂金回收+彩金回推荐收门店 及地联系方式址推荐 - 盛世金银回收
  • 避开这些坑!从两篇TIE投稿时间线,看如何规划你的论文修改与回复周期
  • 大厂笔试“潜规则”:性格测试、情商题怎么破?附真实题型拆解
  • 多维聚合中的数据变形术:从原子粒度到语义立方体
  • 别再为TC37X头疼了!手把手教你用UDE Memtool 2021搞定英飞凌AURIX程序烧录