登录  /  注册
首页 > php教程 > php手册 > 正文

php中static const define变量的区别

php中文网
发布: 2016-05-23 13:07:25
原创
1238人浏览过

在php中static const define三个变量都是可以叫做静态表情了,意思是定义好的就不能再变了,但是他们三个是针对不同的域名,下面我来给各位介绍一下它们三个的区别吧.

const

用来定义那些在运行时不能被改变的常数值,一旦定义且不能改变其值,假如在程序中改变了它的值,那么会出现错误,代码如下:

<?php  
class Math{ 
    const pi=3.14159; 
} 
echo Math::pi;
登录后复制

前面没有美元符号($),可以在不需要初始化该类的情况下实用,常量值必须是一个常量表达式,const定义的变量,在子类中可以被覆盖.

在类的内部定义,php5.3以后也可以在类的外部定义,const不可以用表达式.

define()

可以用 define() 函数来定义常量,一个常量一旦被定义,就不能再改变或者取消定义.

常量只能包含标量数据(boolean,integer,float 和 string).

可以简单的通过指定其名字来取得常量的值,不要在常量前面加上 $ 符号.

define定义全局常量,在任何地方都可以访问.

define不能在类中定义而const可以.

define可以采用任何表达式,如define('BIT_5',1 << 5);

代码如下:

<?php 
    define("CONSTANT", "Hello world."); 
    echo CONSTANT; // outputs "Hello world." 
    echo Constant; // outputs "Constant" and issues a notice. 
?>
登录后复制

define()与const()两者之间的区别:

内存空间的分配上,define进行宏定义的时候,不会分配内存空间,编译时会在main函数里进行替换,只是单纯的替换,不会进行任何检查,比如类型,语句结构等,即宏定义常量只是纯粹的置放关系,如#define null 0;编译器在遇到null时总是用0代替null它没有数据类型(还有疑问请找C语言书籍看预处理部分或者看MSDN.而const定义的常量具有数据类型,定义数据类型的常量便于编译器进行数据检查,使程序可能出现错误进行排查,所以const与define之间的区别在于const定义常量排除了程序之间的不安全性.

define定义全局常量,在任何地方都可以访问.

const用于类成员变量定义,只能用类名访问不能更改要是初学这样显理解着就行别太钻牛角尖就行

static

php中的变量作用范围的另一个重要特性就是静态变量(static 变量).

静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果.

static关键字在类中,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例.

static的成员,必须使用self来访问,代码如下:

class Counter 
{ 
    public static $count = 0;//定义一个静态属性 
    //定义一个静态的方法 
    static function getCount() 
    {  
        return self::$count; 
    } 
} 
echo Counter::getCount(); 
Counter::count;
登录后复制

最后补充一个例子:

<?php 
echo HAHA; 
class test {
    public $name2 = &#39;name2&#39;; 
    static $name = &#39;name&#39;; 
    const CHARSET = "中国"; 
    public function say_hello() { 
        echo self :: CHARSET; 
    } 
    public static function set_name() { 
        echo self :: $name; 
    } 
    public static function set_name2() { 
        self::set_name(); 
    } 
    
    public static function set_name3() { 
        echo $this->name; 
        $this->set_name(); 
    } 
    
} 
$const1 = new test(); 
// 1 
$const1->say_hello(); 
// 2 
echo "<br />"; 
echo test :: CHARSET; 
// 3 
echo "<br />"; 
echo $const1->name; 
// 4 
echo "<br />"; 
echo $const1->set_name(); 
// 5 
echo "<br />"; 
echo $const1->set_name2(); 
// 6 
echo "<br />"; 
echo test::CHARSET; 
// 7 
echo "<br />"; 
echo $const1->CHARSET;
登录后复制


永久链接:

转载随意!带上文章地址吧。

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号