当前位置: 首页 > 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.rkmt.cn/news/1491759.html

相关文章:

  • 模电课设别再头疼了!手把手教你用LM358和滑动变阻器搞定水位检测报警电路
  • 低代码平台架构演进:从 Schema 驱动到 AI 生成式 UI 的工程化方案
  • 从MobileNet到CoAtNet:聊聊那些年我们追过的轻量级网络设计思路
  • 保姆级教程:用Python手写A*算法,5分钟搞定扫地机器人最短路径规划
  • MuleSoft+LLM企业级AI编排:构建可审计、可治理、高韧性的智能工作流
  • 同一段 Prompt 跑 5 个大模型,输出差异让我重新审视模型选型
  • 现场五招验苗技巧,不用专业设备筛选优质鱼苗
  • 大厂笔试“潜规则”:性格测试、情商题怎么破?附真实题型拆解
  • 宁德市黄金回收本地靠谱店铺指南+白银回收+铂金回收+彩金回推荐收门店 及地联系方式址推荐 - 盛世金银回收
  • 攀枝花市黄金回收本地靠谱店铺指南+白银回收+铂金回收+彩金回推荐收门店 及地联系方式址推荐 - 盛世金银回收
  • 日月不失其体,故蔽而复明;江汉不失其源,故穷而复通
  • Java+Vue漫画阅读系统源码包:含部署教程、接口文档、数据库脚本与答辩PPT
  • FPGA开发用SPI模式0主从通信Verilog工程,含ModelSim可运行仿真环境
  • Arduino 433MHz无线收发实战包:VirtualWire源码+DHT11传输示例+全文档
  • Unlock Music音乐解锁工具:3分钟快速解密所有加密音乐格式
  • 平凉市黄金回收本地靠谱店铺指南+白银回收+铂金回收+彩金回推荐收门店 及地联系方式址推荐 - 盛世金银回收
  • matchexpression和matchlabels的区别
  • 智能容量规划:基于时序预测的弹性伸缩实践,从经验估算到数据驱动
  • 金华市黄金回收本地靠谱店铺指南+白银回收+铂金回收+彩金回推荐收门店 及地联系方式址推荐 - 盛世金银回收
  • 浏览器用户画像分析 - 大屏数据接入
  • 剪辑问题不知道问谁怎么办?5款工具实测对比
  • 2025-2026年上海屋宁遮阳设备有限公司电话查询:选购户外遮阳产品前需了解的事项 - 品牌推荐
  • PHP写的电视直播系统,网页和手机都能推流看直播
  • 2026夏季工作服衬衫,清凉透气怎么选?
  • 晋中市黄金回收本地靠谱店铺指南+白银回收+铂金回收+彩金回推荐收门店 及地联系方式址推荐 - 盛世金银回收
  • 什么是4F级机场?现代化机场的控制台需求有哪些?
  • 如何免费解锁Wand高级功能:终极Wand-Enhancer使用指南
  • 单层VQ-VAE如何通过码本优化逆袭分层架构?
  • 2026石油化工用玻璃钢运输罐优质厂家推荐指南:玻璃钢搅拌罐、玻璃钢水渠、玻璃钢灌溉排水渠、玻璃钢田埂、玻璃钢电力盖板选择指南 - 优质品牌商家
  • 手把手封装UniApp蓝牙打印JS-SDK:以LPAPI插件为例打造可复用业务组件