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

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

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

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

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

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

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

接下来我们说说static

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

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

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

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

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

以上这两种调用方式都是合法的。

php中const与static的区别与使用(转)的更多相关文章

  1. php中const和static的区别和联系

    1.const是类中的常量,类外用define来定义常量2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法3.const和static都属于类本身,而不属于n ...

  2. C#中 const 和 readonly 的区别

    C#中 const 和 readonly 的区别 来源 https://www.cnblogs.com/gsk99/archive/2008/10/10/1308299.html http://dev ...

  3. C# const和static readonly区别

    [转]C# const和static readonly区别 以前只是知道Const和static readonlyd的区别在于const的值是在编译期间确定的,而static readonly是在运行 ...

  4. vue中assets和static的区别

    Vue中assets和static的区别 再一次框架定型中,与同事在静态资源的存放上有了一些分歧,后来经过查阅总结如下: 相同点:   assets和static两个都是存放静态资源文件.项目中所需要 ...

  5. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  6. C++ 中 const和define的区别

    来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...

  7. C++ 中 const 和 static 的作用

    目录 const 的主要应用如下: const 关键字使用的注意点: C++中static关键字有三个明显的作用: const的主要应用如下: const 用于定义常量:const定义的常量编译器可以 ...

  8. 今天思考一个问题,PHP const和static的区别

    static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...

  9. C#中Const和Readonly的区别

    const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再 ...

随机推荐

  1. iOS 警告收集快速消除

    1.ld: warning: directory not found for option 去掉警告的方法 工程老是提示ld: warning: directory not found for opt ...

  2. Bootstrap知识点梳理

  3. CSS实现多重边框和内凹圆角

    CSS实现多重边框 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...

  4. Struts2_HelloWorld_3

    struts.xml的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  5. 【Troubleshooting 】Outlook 客户端无法显示电子邮件图像

    出于安全原因,Outlook 2013/2016不会在电子邮件中显示图像,但您可以右键单击图像并选择" 下载图片 "选项.我最近注意Outlook停止显示图像,并且没有下载图像的选 ...

  6. Java Map应用

    一.基本API使用方法 直接上代码,注释讲解 package com.map; import java.util.HashMap; import java.util.Iterator; import ...

  7. phpStudy-在使用phpMyAdmin报404Error

    今天刚刚知道什么是phpStudy和phpMyAdmin,感觉还可以吧.熬到凌晨两点多就为看这点东西.结果不知道怎么回事,当我在网上转一圈回来后发现自己的数据管理器竟然进不进去了! 神马情况啊?我的解 ...

  8. C# 安装 Visual Studio IDE

    官网: https://visualstudio.microsoft.com/zh-hans/ 下载社区版(免费的) .微软的软件安装都是很nice的.安装过程中选择需要的配置进行安装(比如.net桌 ...

  9. 设定网页最小最大宽度和高度(兼容IE6)

    http://www.cnblogs.com/double-bin/archive/2011/12/19/2293093.html /* 最小寬度 */ .min_width{min-width:30 ...

  10. IOS中 copy ,strong ,weak ,assign使用区别

      .@property属性的用法 * weak(assign) :  代理\UI控件 * strong(retain) : 数组.模型)其他对象(除代理\UI控件\字符串以外的对象) * copy ...