PHP常量总结

本文深入解析PHP中的常量概念,包括常量的定义方式、作用域特性、与变量的区别,以及如何使用define()函数和const关键字进行定义。同时,探讨了这两种定义方式之间的差异,并通过实例说明了常量在不同上下文中的应用。

概念

常量我们可以理解为值不变的量。常量只要被定义了,在程序脚本的其他任何地方都不能改变

因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值

常量不管在哪里被定义,都具有超全局作用域

常量的定义

常量可以通过define()函数const关键字两种形式定义

个人建议,类常量以外的常量定义尽可能使用define

define ( string $name , mixed $value [, bool $case_insensitive = false ] ) 
  case_insensitive可选。默认是false,大小写敏感的。如果设置为 TRUE,该常量则大小写不敏感。
const NAME = VALUE
define (ABC, "1111") ;    //name可以不加引号,但是不建议这样写
define ("
ABC", "1111") ; //define定义常量时推荐常量名带引号
const DEF = "2222"; //const定义常量时,常量名不能带引号

 

define()函数和const的区别

1.在php5.3.0以前,const只用于在类内部定义类常量,而无法在类外部定义常量。

  在php5.3.0以后,const可以在类外部定义常量,但不能在函数,条件语句,循环语句等的{}语句块中定义常量

2.使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

3.define可以在在函数,条件语句,循环语句等的{}语句块中定义常量,const不可以

4.const可以定义类常量,而define不可以

5.define可以动态设置常量名,const不可以

6.define常量值可以采用任何表达式,而const只能接受静态的标量

7.const定义的常量大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

 

 

 

<?php
$hostname = php_uname('n');
//类外正常定义
const C1 = 1;
define("C2", 2);
//{}语句块内不能使用const,可以使用define
if (true) {
    const C3 = 1;     //错误
    define("C4", 2);
}
for ($i=0; $i<2;$i++) {
    const C5= 1;    //错误
    define("C6", 2);
}

function test () {
    const C7= 1;    //错误
    define("C8", 2);
}

//define可以动态使用常量名,const不可以
//define常量值可以采用任何表达式,而const只能接受静态的标量
const  FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
    define('BIT_' . $i, 1 << $i);
    define('HOST_NAME' . $i, 'HOST' .$i);
}
//const可以定义类常量
class Collect_notification {
    const C9= 1;       
    define("C10", 2);    //错误。define不能定义类常量

    function main(){
        const C11= 1;    //错误。{}语句块内不能使用const
        define("C12", 2);
    }
}

 

常量的使用

有两种形式

  1,直接使用名字  

  2,使用constant()函数:constant(“常量名”)函数可以动态地输出不同的常量,在使用上要灵活方便很多

const  FOO = 'BAR';
for ($i = 0; $i < 2; ++$i) {
    define('HOST_NAME' . $i, 'HOST' .$i);
}
echo HOST_NAME0;   //直接使用常量名
echo HOST_NAME1;
for ($i = 0; $i < 2; ++$i) {
    echo constant('HOST_NAME'.$i); //constant()函数动态使用常量 
}

 

 常量与变量的区别

定义形式不同 (常量使用define或者const定义);

使用形式不同(常量不需要 $ 符号);

可变程度不同(常量的值不可改变或者销毁);

作用范围不同(常量具有超全局作用域(函数内外都可直接使用));

可用类型不同(常量只能存储标量类型intfloatstringbool);

 

转载于:https://www.cnblogs.com/gaoBlog/p/10341538.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
<think>好的,我现在需要帮助用户了解PHP中的魔术常量及其用法。首先,我需要回忆一下魔术常量的基本概念。根据用户提供的引用,魔术常量PHP预定义的,具有特殊用途的常量,它们的值会根据上下文变化。比如__LINE__代表当前行号,__FILE__表示当前文件的路径。 接下来,我需要整理主要的魔术常量,并逐个说明它们的定义和功能。例如,引用[2]提到魔术常量可以帮助获取文件路径、行号、函数名等信息,这对调试很有帮助。引用[4]中的例子展示了__FUNCTION__的用法,显示函数被定义时的名称。 然后,我需要考虑用户可能需要的具体信息,比如每个常量的使用场景和示例。比如__DIR__返回文件所在目录,这在包含文件时很有用。同时,用户可能想知道如何正确使用这些常量,比如__CLASS__在类中的表现,或者__METHOD__与__FUNCTION__的区别。 另外,用户提供的引用[5]提到了$_SERVER变量和魔术常量的区别,这里可能需要简要说明魔术常量与超全局变量的不同,但用户的问题集中在魔术常量上,所以重点还是放在常量的解释上。 还要注意用户提到的引用来源,确保引用标识正确添加。例如,在解释__LINE__时,可以引用[2]和[3]中的内容,说明其动态变化的特性。每个常量的描述后面需要自然地加上引用标记,如[^2][^3]。 最后,生成相关问题,帮助用户进一步探索。比如魔术常量与普通常量的区别,或者实际项目中的应用案例。这些问题应基于用户可能想深入了解的方向,如调试、路径处理等。 总结步骤:定义魔术常量,列出主要常量及其用法,给出示例代码,注意事项,并添加相关问题。确保所有LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但这里可能不需要数学公式,主要注意代码块的正确展示和引用标记的位置。</think>### PHP 魔术常量详解 #### 定义与特点 PHP 魔术常量是**预定义的特殊常量**,其值根据代码的上下文动态变化。它们以双下划线开头和结尾(例如 `__LINE__`),主要用于获取脚本的运行时信息(如文件路径、类名、方法名等),帮助开发者简化调试和动态代码处理[^2][^3]。 --- #### 主要魔术常量及功能 1. **`__LINE__`** - **功能**:返回当前代码行号。 - **示例**: ```php echo __LINE__; // 输出当前行号,例如 5 ``` - **用途**:调试时快速定位错误位置[^3][^4]。 2. **`__FILE__`** - **功能**:返回当前文件的**绝对路径**(包含文件名)。 - **示例**: ```php echo __FILE__; // 输出类似 /var/www/index.php ``` - **用途**:动态加载文件或记录日志时获取路径[^2][^3]。 3. **`__DIR__`** - **功能**:返回当前文件所在的**目录路径**(PHP 5.3+)。 - **示例**: ```php echo __DIR__; // 输出类似 /var/www ``` - **注意**:等价于 `dirname(__FILE__)`,但更简洁[^4]。 4. **`__FUNCTION__`** - **功能**:返回当前函数名(区分大小写)。 - **示例**: ```php function test() { echo __FUNCTION__; // 输出 "test" } test(); ``` - **用途**:记录函数调用日志或动态方法处理[^4]。 5. **`__CLASS__`** - **功能**:返回当前类名(含命名空间)。 - **示例**: ```php class MyClass { public function showClassName() { echo __CLASS__; // 输出 "MyClass" } } ``` - **用途**:实现类工厂模式或反射操作[^3]。 6. **`__METHOD__`** - **功能**:返回当前方法的**完整名称**(类名::方法名)。 - **示例**: ```php class User { public function getName() { echo __METHOD__; // 输出 "User::getName" } } ``` - **与 `__FUNCTION__` 区别**:包含类名[^4]。 7. **`__NAMESPACE__`** - **功能**:返回当前命名空间名称(PHP 5.3+)。 - **示例**: ```php namespace App\Controllers; echo __NAMESPACE__; // 输出 "App\Controllers" ``` - **用途**:动态构建类名或自动加载[^2][^3]。 --- #### 使用注意事项 1. **动态性**:魔术常量的值在运行时确定,例如 `__LINE__` 会随代码位置变化[^3]。 2. **大小写敏感**:如 `__FUNCTION__` 返回的函数名严格遵循定义时的大小写[^4]。 3. **作用域限制**:`__CLASS__` 和 `__METHOD__` 仅在类或方法内部生效。 --- #### 示例:综合使用场景 ```php // 记录日志时包含文件名和行号 error_log("Error in " . __FILE__ . " on line " . __LINE__); // 动态加载当前目录下的配置文件 require __DIR__ . '/config.php'; // 调试类方法 class Logger { public static function log() { echo "Called method: " . __METHOD__; // 输出 "Logger::log" } } Logger::log(); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值