荣耀v30|3分钟短文:Laravel 编程中优雅地添加定义常量

荣耀v30|3分钟短文:Laravel 编程中优雅地添加定义常量

引言
laravel妥妥的到处都是面向对象了 , 以前流程处理的PHP代码 , 很少见到踪影了 ,为什么?大型应用实在是难以维护 , 所有代码设计必须有规有矩了 。 今天我们说一说 ,如何在代码中定义常量 。

【荣耀v30|3分钟短文:Laravel 编程中优雅地添加定义常量】

学习时间
在laravel中 , 在 .env 文件内定义常量当然是可以的 , 但是env文件 ,尽量作为环境变量存储使用 , 且线上一般不需要修改 。 这是全局有效的 。
如果是全局的配置项 , 可以使用 define 函数 , 比如下面的代码:
define('OPTION_ATTACHMENT' 13);
define('OPTION_EMAIL' 14);
define('OPTION_MONETERY' 15);
define('OPTION_RATINGS' 16);
define('OPTION_TEXTAREA' 17);

这样写固然可以 , 但是不方便程序的管理 , 功能分散 , 代码凌乱 。 比较好的一个实践 ,是把这些配置参数 , 写在配置文件内 , 然后使用laravel框架提供的 Config 类 , 读取这些数据 。
在config目录下 , 比如新建 constants.php 文件 , 然后写入下面这些配置项:
return [
   'options' => [
       'option_attachment' => '13'
       'option_email' => '14'
       'option_monetery' => '15'
       'option_ratings' => '16'
       'option_textarea' => '17'
   


;

由于配置文件在框架加载中是全局有效的 , 所有在程序的任何地方 , 都可以像下面这样调用:
Config::get('constants.options');
Config::get('constants.options.option_attachment');

非常直观好用 。 唯一需要注意的是 , 你得记得住键名 。
类的属性
在面向对象代码中 , 如果常量类型数据作用域仅限于某个类 , 及其继承者 ,那么可以将这部分数据定义为类的属性 , 提供后续访问 。
比如有下面这个类定义:
namespace App;

class MyApp {
  const MYCONST = 'val';


如果不想引用的时候总是要写命名空间 , 那么可以设置到系统的关联表内 。 在 config/app.php 文件内写入下述代码:
'aliases' => [
 'MyApp' => App\\MyApp::class



那么在控制器 , 或者模型 , 或者blade模板内 , 都可以这样使用
MyApp::MYCONST

返回的就是 MyApp类属性的值 。
写在最后
本文介绍了三种定义全局变量的方法 。 其实我们之前的文章中还提到 ,还可以使用自定义文件 , 然后手动配置到 conposer.json 的 files 文件加载项内 ,那么系统在引导启动的时候 , 也会全局加载 。
如果全局的常量 , 我们推荐写到配置文件; 如果是局部作用的常量 , 我们推荐写到类属性内 。
Happy coding :-)
我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。


    推荐阅读