php中const与static的区别与使用(转)
首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下:
- class Test{
- const PATH = 'c/';//修饰常量
- const function test(){//这种方法是错误的,const无法修饰方法
- }
- }
const在使用的时候不需要添加权限修饰字段,但是在调用const修饰的常量时是需要技巧的,因为常量是属于整个类的,而不是属于某个对象,所以在调用的时候需要使用类名加域名修饰符,例:
- echo Test::PATH;
- //也可以使用下面的方法调用
- $test = new Test();
- echo $test::PATH;
但是在类内部调用的时候就会出现问题,如何在类内部获取当前类名或者当前对象名(php可以根据对象获取类名-反射),php中给我们提供了两个特殊的关键字,如:
- 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,只可以使用当前类的静态成员变量,和类常量。
- 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修饰的变量不同,既可以通过类名调用,也可以通过对象名调用,比如:
- echo '周长:'. Test::lenth(1).'<br/>';
- echo '面积:'.Test::area(1).'<br/>';
- $per = new Test();
- echo $per->lenth(3);
以上这两种调用方式都是合法的。
php中const与static的区别与使用(转)的更多相关文章
- php中const和static的区别和联系
1.const是类中的常量,类外用define来定义常量2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法3.const和static都属于类本身,而不属于n ...
- C#中 const 和 readonly 的区别
C#中 const 和 readonly 的区别 来源 https://www.cnblogs.com/gsk99/archive/2008/10/10/1308299.html http://dev ...
- C# const和static readonly区别
[转]C# const和static readonly区别 以前只是知道Const和static readonlyd的区别在于const的值是在编译期间确定的,而static readonly是在运行 ...
- vue中assets和static的区别
Vue中assets和static的区别 再一次框架定型中,与同事在静态资源的存放上有了一些分歧,后来经过查阅总结如下: 相同点: assets和static两个都是存放静态资源文件.项目中所需要 ...
- c#中const、static、readonly的区别
1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...
- C++ 中 const和define的区别
来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...
- C++ 中 const 和 static 的作用
目录 const 的主要应用如下: const 关键字使用的注意点: C++中static关键字有三个明显的作用: const的主要应用如下: const 用于定义常量:const定义的常量编译器可以 ...
- 今天思考一个问题,PHP const和static的区别
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...
- C#中Const和Readonly的区别
const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再 ...
随机推荐
- C# Label背景透明
Label背景透明是相对于Label的Parent而言的,如果Label的Parent是一个winform,而这个winform又有一个PictureBox,现在Label放在PictureBox上, ...
- C#用委托实现异步,异步与多线程的异同
异步与多线程的区别(转) 一.异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法.异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自 ...
- Android 实现朋友圈有图片和视频
最近开发比较烦,这个作为我第一篇博客吧. 效果就是图上的样子. 首先是布局文件,没什么就是一个RecycleView <android.support.v7.widget.RecyclerVie ...
- [SVN]TortoiseSVN工具培训3─使用基本流程和图标说明
1.SVN的使用基本流程 注意:对于文件编辑方面,上图的编辑副本操作前建议进行Get lock操作,以防出现后续的冲突等异常报错. 2.SVN的基本图标说明
- [SVN]TortoiseSVN工具培训2─SVN的基本概念和工作模式
1.SVN是什么? TortoiseSVN,属于集中式版本控制工具,是Subversion版本控制系统的一个免费SVN开源客户端,可以对文件版本进行统一管理和控制:文件保存在中央版本库,您可以将文件恢 ...
- 监控系统-nagios
https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/ install yum -y install nagios-4 ...
- php的yii框架开发总结2
开发流程:1.用yii创建网站目录,当时用命令行创建时遇到了问题,试了很久才找到原因:我的原因是在yii/framework/yiic.bat这个文件中的一条语句: if "%PHP_COM ...
- git 因线上分支名重复导致无法拉取代码
有时 git pull 或 git fetch 时发现 git 报了个异常,说法像是无法将线上某个分支与本地分支合并,由于分支是...(很长的hash)但是分支却是...(很长的hash) 仔细查查后 ...
- MySQL子查询有哪五种形式?
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品.MySQL是最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的RDBMS(Rela ...
- C++ Eigen库和Matlab对比
// A simple quickref for Eigen. Add anything that's missing. // Main author: Keir Mierle #include &l ...