php中const与static的区别与使用

首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下:

[php] view plain copy

1
2
3
4
5
class  Test{ 
     const  PATH =  'c/' ; //修饰常量 
     const  function  test(){ //这种方法是错误的,const无法修饰方法 
    
}

const在使用的时候不需要添加权限修饰字段,但是在调用const修饰的常量时是需要技巧的,因为常量是属于整个类的,而不是属于某个对象,所以在调用的时候需要使用类名加域名修饰符,例:

[php] view plain copy

1
2
3
4
echo  Test::PATH; 
//也可以使用下面的方法调用 
$test  new  Test(); 
echo   $test ::PATH;

但是在类内部调用的时候就会出现问题,如何在类内部获取当前类名或者当前对象名(php可以根据对象获取类名-反射),php中给我们提供了两个特殊的关键字,如:

[php] view plain copy

1
2
3
4
5
6
7
class  Test{ 
     const  PATH =  'c/' ; //修饰常量 
     public  function  ass(){ 
         echo  $this ::PATH. '<br />'
         echo  self::PATH. '<br />'
    
}

其中self(不加$)代表当前类名,$this代表当前对象。这样,我们就可以在类内部调用const修饰的常量了。

接下来我们说说static

const虽然很好用,但是一经定义就无法修改值了,但是有的时候我们需要一个属于类的属性,但是又可以修改其值,比如统计此类构造了几个对象,这个时候就是使用static的时候了,在static修饰类的成员变量的时候,它的使用方法基本与const一样,区别就在于static修饰的属性可以添加权限(7.1的php中const也可以添加,以前的不能),并且static修饰的成员变量的值是可以修改的。

但是当static修饰成员方法的时候,使用方法有一点改变,在类的内部,static修饰的方法体内部,无法访问当前类的任何普通成员变量,准确的来说是无法使用关键字$this,只可以使用当前类的静态成员变量,和类常量。

[php] view plain copy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class  Test{ 
     static  public  $name = 'asd'
     const  π = 3.1415926; 
     public  $age  = 10; 
     public  static  function  lenth( $r ){ 
         //echo $this->age;//会发生错误,不能访问普通的成员变量 
         echo  Test:: $name
         return  $r *2*self::π; 
           
    
     public  static  function  area( $r ){ 
         return  $r * $r *self::π; 
     }    
}

在使用static的过程中,调用的方法与调用static修饰的变量不同,既可以通过类名调用,也可以通过对象名调用,比如:

[php] view plain copy

1
2
3
4
echo  '周长:' . Test::lenth(1). '<br/>'
echo  '面积:' .Test::area(1). '<br/>'
$per  new  Test(); 
echo  $per ->lenth(3);

以上这两种调用方式都是合法的。本文由:http://www.77884.net整理发布。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值