在本 PHP 教程中,您将学习 PHP 中的所有常量。我们将详细讨论什么是常量、常量数组、const 关键字、常量的命名约定、常量和变量的区别、魔术常量以及数学常量。
常量与变量非常相似,但常量的值不能被修改或取消定义。常量是存储简单值的名称或标识符,这些值不会改变。一旦在程序中定义,常量的值就不能被修改。常量默认是全局的,因此我们可以在整个脚本中需要它们的任何地方使用它们。与变量不同,常量不使用“$”作为前缀。常量可以通过两种方式定义:
语法
define(name, value, case-insensitive); // using the define() function
const name = value; // using the const keyword
我们使用 define() 函数在 PHP 中定义常量。通过使用 define() 函数,它在运行时定义一个常量。在 define() 函数中,我们传递参数“name”、“value”和“case-insensitive”。参数“case-insensitive”是可选的,默认情况下它将为 false,如果我们要将常量名称定义为不区分大小写,我们应该将参数传递为 true。按照约定,我们将常量标识符命名为大写,这样做是为了更容易识别常量和变量。像变量一样,我们只使用字母数字字符和下划线来命名常量,我们不使用特殊字符和空格。所有常量名称都以字母或下划线开头。
define(“WELCOME”, “Welcome to learnetutorials.com”);
echo WELCOME;
输出
Welcome to learnetutorials.com
不区分大小写值为 true 的示例
define(“WELCOME”, “Welcome to learnetutorials.com”, true);
echo welcome;
输出
Welcome to learnetutorials.com
与 define() 函数一样,我们也使用 const 关键字在 PHP 中定义常量。通过使用 const 关键字,它在编译时定义常量。const 关键字是一个语言结构,而不是像 define() 这样的函数。默认情况下,使用 const 关键字定义的常量是区分大小写的。按照约定,我们将常量标识符命名为大写,这样做是为了更容易识别常量和变量。像变量一样,我们只使用字母数字字符和下划线来命名常量,我们不使用特殊字符和空格。所有常量名称都以字母或下划线开头。
const WELCOME = “Welcome to learnetutorials.com”;
echo WELCOME;
输出
Welcome to learnetutorials.com
不区分大小写值为 true 的示例
const WELCOME = “Welcome to learnetutorials.com”;
echo welcome;
输出
error
我们还可以在 PHP 中定义一个常量数组。要定义常量数组,我们使用 define() 函数。我们使用常量数组来定义在整个脚本中不应修改的数组。定义常量数组与定义常量类似。我们使用 define() 函数,参数为“name”、“array”和“case-insensitive”。
语法
define(name, array, case-insensitive);
示例
define(“LANGUAGES”,[
“PHP”,
“Python”,
“Java”
] );
echo LANGUAGES[0];
输出
PHP
不区分大小写值为 true 的示例
define(“LANGUAGES”,[
“PHP”,
“Python”,
“Java”
], true);
echo languages[0];
输出
PHP
constant() 函数用于返回常量的值。当您想访问常量的值但不知道其名称时(例如,如果它存储在变量中或由函数返回),这很有用。
示例
define(“AGE”,50); // define a constant with name AGE
$AGE = 18; // define a variable with name AGE
echo $AGE; // print the value of the variable
echo constant(“AGE”); // print the value of the constant
输出
18 50
要检查常量是否在脚本中定义,我们使用 defined() 函数。在 defined() 函数中,我们传递常量名称作为参数,如果常量在脚本中定义,它将返回 1 (true),否则它将返回 0 (false)。
语法
define(name, array, case-insensitive);
示例
define(“NAME”, “Jhon Doe”);
if(defined(NAME)){
echo “The constant is defined”;
} else {
echo “The constant is not defined”;
}
输出
The constant is defined
不区分大小写值为 true 的示例
define(“FULL_NAME”, “Jhon Doe”);
if(defined(NAME)){
echo “The constant is defined”;
} else {
echo “The constant is not defined”;
}
输出
The constant is not defined
在程序中并不总是需要将常量名称复杂化到您想访问它的程度。例如,如果您可能有一个通用程序,您希望它在任意数量的不同常量上运行,而不仅仅是您输入的名称。解决此问题的最简单方法是将常量名称保存在变量中。为此,我们必须将常量名称分配给变量,然后当需要时,我们必须使用 constant() 函数并将变量名称作为参数。
示例
define(“FULL_NAME”, “Jhon Doe”);
$name = “FULL_NAME”;
echo constant($name);
输出
Jhon Doe
| 常量 | 变量 |
|---|---|
| 一旦定义了常量,它就不能被修改或取消定义 | 变量可以根据需要随时修改或取消定义 |
| 默认情况下,常量是全局的 | 变量可以是局部、静态或全局的 |
| 常量使用 define() 函数或 const 关键字定义 | 定义变量不需要任何东西,只需使用赋值运算符 (=) 赋值即可 |
| 常量可以从任何地方声明和检索,无论变量作用域规则如何 | 变量也可以在任何地方声明,但变量作用域规则是遵循的 |
| 常量不使用“$”符号 | 变量使用“$”符号作为前缀来表示变量 |
魔术常量是 PHP 中预定义的常量,它们会根据其用途发生显著变化。它们以双下划线 (__) 开头,并以另一个双下划线结尾。它们与其他预定义常量非常相似,但由于它们的值会根据情况而变化,因此它们被称为魔术常量。
PHP 中有 9 个魔术常量
它返回常量被调用的当前行号。
<?php
echo "Using __LINE__ \n ";
echo __LINE__;
?>
输出
Using __LINE__ 3
它用于返回文件存储的路径。
<?php
echo "Using __FILE__ \n ";
echo __FILE__;
?>
输出
Using __FILE__ C:\ xampp\htdocs\php\magic_constant.php
它用于返回执行文件的目录路径。
<?php
echo "Using __DIR__ \n ";
echo __DIR__;
?>
输出
Using __DIR__ C:\ xampp\htdocs\php
它用于返回使用 __FUNCTION__ 常量的函数的函数名称。
<?php
echo "Using __FUNCTION__ \n";
function a(){
echo __FUNCTION__;
}
a();
?>
输出
Using __FUNCTION__ a
它用于返回使用 __CLASS__ 常量的类的类名称。
<?php
echo "Using __CLASS__ \n";
class a{
function ab(){
;
}
}
class b{
function ab(){
echo __CLASS__;
}
}
$a = new a;
$a -> ab();
$b = new b;
$b -> ab();
?>
输出
Using __CLASS__ a
它用于返回使用 __TRAIT__ 常量的 trait 的 trait 名称。
<?php
echo "Using __TRAIT__ \n";
trait ab {
function abc(){
echo __TRAIT__;
}
}
class xyz {
use ab;
}
$a = new xyz;
$a->abc();
?>
输出
Using __TRAIT__ a
它用于返回使用 __METHOD__ 常量的类方法的类方法名称。
<?php
echo "Using __METHOD__\n";
class a {
function b() {
echo __METHOD__ . "\n";
}
function c(){
echo __METHOD__;
}
}
$a = new a;
$a->b();
$a->c();
?>
输出
Using __METHOD__ a::b a::c
它将返回当前使用的命名空间。
<?php
echo "Using __NAMESPACE__\n";
class a {
function __construct() {
echo 'This will be printed on calling namespace.';
}
}
$ab = __NAMESPACE__ . '\a';
$a = new $ab;
?>
输出
Using __NAMESPACE__
This will be printed on calling namespace.
与其他魔术常量不同,它不以双下划线 (__) 开头和结尾。它用于返回 ClassName 的完全限定名称。PHP 5.5.0 引入了 ClassName::class 常量。它在处理命名空间类时很有用。
<?php
namespace abc;
echo "Using ClassName::class \n";
class xyz {
}
echo xyz::class; //ClassName::class
?>
输出
Using ClassName::class abc\xyz
| 常量 | 值 | 描述 |
|---|---|---|
| INF | INF | 它用于返回无穷大 |
| M_E | 2.7182818284590452354 | 它用于返回 e |
| M_EULER | 0.57721566490153286061 | 它用于返回欧拉常数 |
| M_LNPI | 1.14472988584940017414 | 它用于返回 PI 的自然对数:log_e(pi) |
| M_LN2 | 0.69314718055994530942 | 它用于返回 2 的自然对数:log_e 2 |
| M_LN10 | 2.30258509299404568402 | 它用于返回 10 的自然对数:log_e 10 |
| M_LOG2E | 1.4426950408889634074 | 它用于返回 E 的以 2 为底的对数:log_2 e |
| M_LOG10E | 0.43429448190325182765 | 它用于返回 E 的以 10 为底的对数:log_10 e |
| M_PI | 3.14159265358979323846 | 它用于返回 Pi 的值 |
| M_PI_2 | 1.57079632679489661923 | 它用于返回 Pi/2 的值 |
| M_PI_4 | 0.78539816339744830962 | 它用于返回 Pi/4 的值 |
| M_1_PI | 0.31830988618379067154 | 它用于返回 1/Pi 的值 |
| M_2_PI | 0.63661977236758134308 | 它用于返回 2/Pi 的值 |
| M_SQRTPI | 1.77245385090551602729 | 它用于返回 PI 的平方根:sqrt(pi) |
| M_2_SQRTPI | 1.12837916709551257390 | 它用于返回 2/PI 的平方根:2/sqrt(pi) |
| M_SQRT1_2 | 0.70710678118654752440 | 它用于返回 1/2 的平方根:1/sqrt(2) |
| M_SQRT2 | 1.41421356237309504880 | 它用于返回 2 的平方根:sqrt(2) |
| M_SQRT3 | 1.73205080756887729352 | 它用于返回 3 的平方根:sqrt(3) |
| NAN | NAN | 它用于返回“非数字” |
| PHP_ROUND_HALF_UP | 1 | 它用于返回四舍五入 |
| PHP_ROUND_HALF_DOWN | 2 | 它用于返回向下舍入 |
| PHP_ROUND_HALF_EVEN | 3 | 它用于返回偶数四舍五入 |
| PHP_ROUND_HALF_ODD | 4 | 它用于返回奇数四舍五入 |