1. 常量語法:
常量是一個簡單值的識別符號(名字)。在指令碼執行期間該值不能被修改和刪除;
常量預設為大小寫敏感。傳統上常量的識別符號總是大寫;
常量的命名:常量名以字母或下劃線開始,後面跟著任何字母,數字和下劃線。
一旦宣告不能修改和刪除;
2. 常量的定義和檢測:
(1) define
: bool define ( string $name ,
mixed $value
[, bool $case_insensitive = false ] )
定義一個常量
;
注意:
1️⃣常量值($value
),在php5中僅支援標量(string
,bool
,int
,float
) 和NULL
,在php7以後常量值支援陣列array
;
2️⃣常量還支援resource
型別,但是不推薦這樣做,因為可能會發生不可預知的錯誤行為;
(2) const
: 可以用來定義類常量;可以把在類中始終保持不變的值定義為常量
。
常量的值必須是一個定值,不能是變數,類屬性,數學運算的結果或函式呼叫。
(3) define
和 const
兩者的區別:
const
和define
都可以定義常量,而且常量一旦定義不可以修改和刪除;define
是函式, 有返回值;const
是語言結構, 效率更快;const
可以用來定義類常量,define
不能定義類常量;
(4) 常量的檢測:defined
: 檢查某個名稱的常量是否存在;bool defined ( string $name )
: 返回 bool
值;
注意:
defined
:只能檢測define
定義的常量是否存在;
example1.php
常量的定義和命名
<?php
// 合法的常量名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 非法的常量名
define("2FOO", "something");
// 下面的定義是合法的,但應該避免這樣做:(自定義常量不要以__開頭)
// 也許將來有一天PHP會定義一個__FOO__的魔術常量
// 這樣就會與你的程式碼相沖突
define("__FOO__", "something");
?>
和超全域性陣列一樣,常量的範圍是全域性的。不管作用區域就可以在指令碼的任何地方訪問常量。
example2.php
定義類常量
<?php
class MyClass
{
const constant = 'constant value';
function showConstant() {
echo self::constant . "\n";
}
}
echo MyClass::constant . "\n";
$classname = "MyClass";
echo $classname::constant . "\n"; // 自 5.3.0 起
$class = new MyClass();
$class->showConstant();
echo $class::constant."\n"; // 自 PHP 5.3.0 起
?>
example3.php
常量值是陣列的用法
const ARR = ['a', 'b', 'c'];
define('ARRAY1', ['A1', 'B1', 'C1']);
print_r(ARR); // Array ( [0] => a [1] => b [2] => c )
print_r(ARRAY1); // Array ( [0] => A1 [1] => B1 [2] => C1 )
echo ARR[1] . "\n"; // b
echo ARRAY1[1]; //B1
?>
類常量注意事項:
- 介面(interface)中也可以定義常量。
- 自 PHP 5.3.0 起,可以用一個變數來動態呼叫類。但該變數的值不能為關鍵字(如 self,parent 或 static)。
3.魔術常量:
PHP定義了
8 個 魔術常量,他們的值隨著他們在程式碼中的位置改變而改變的。
__LINE__
: 檔案中的當前行號;__FILE__
:檔案的完整路徑和檔名。如果用在被包含的檔案中,則返回被包含的檔名。__DIR__
:檔案所在的目錄。如果用在被包括檔案中,則返回被包括的檔案所在的目錄。__FUNCTION__
:函式名稱。__CLASS__
:類的名稱。__TRAIT__
:Trait的名稱。__METHOD__
:類的方法名。__NAMESPACE__
:當前名稱空間的名稱,區分大小寫。
以上就是常量的全部內容。
相關題目:
php 中 __FILE__ 表示什麼意思?
歡迎補充和糾錯,謝謝!!
本作品採用《CC 協議》,轉載必須註明作者和本文連結