const

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

<?php 
calss 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
class test {
    public $name2 = \'name2\';
    static $name = \'name\';
    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;
?>

 

收藏 打印