引言
laravel妥妥的到處都是面向物件了,以前流程處理的PHP程式碼,很少見到蹤影了, 為什麼?大型應用實在是難以維護,所有程式碼設計必須有規有矩了。今天我們說一說, 如何在程式碼中定義常量。
學習時間在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 :-)
最新評論