php的static和const

本文深入探讨PHP中static和const关键字的用法,解析两者在类中的应用差异,包括属性修饰、方法修饰、访问方式及作用域等核心概念。通过实例演示如何在类中正确使用这两个关键字。

php中static和const关键字用法分析

1.const是类中的常量,类外用define来定义常量
2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法
3.const和static都属于类本身,而不属于new后的类实例.类内访问使用self::,类外使用类名::来访问;类内的$this指代类实例本身,const和static属于类本身,所以无法用$this访问
4.self::NAME指代const,self::$name指代static;const是常量,是不需要变量符号的.static修饰的变量,需要变量符.
5.const一旦被定义不可更改,static修饰的变量是可以被更改的
6.static方法中,不能使用类的普通成员和方法;这很好理解,调用静态方法的时候,不能肯定类有没有被实例化.类的普通方法中可以使用static属性和static方法.

 

这篇文章主要介绍了php中static和const关键字用法,结合实例形式分析了static和const关键字的功能、使用方法与相关注意事项,需要的朋友可以参考下

 

本文实例讲述了php中static和const关键字用法。分享给大家供大家参考,具体如下:

static关键字在类中描述的成员属性和成员函数都是静态的。

static成员能限制外部的访问,因为static成员是属于类的,而不是属于任何对象实例。

从内存的角度讲,其中对象是放在“堆内存”中,对象的引用是放在“栈内存”中,而静态成员被放在初始化静态段中,在类的第一次加载的时候加入的。可以让对内存中的所有对象所共享。如下图所示:

2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消2016127112941520.png?2016117113139uploading.4e448015.gif转存失败重新上传取消

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

class Person{

 public static $myCountry = "中国";

 public static function say(){

  echo "我的祖国是:".self::$myCountry."<br>";

 }

}

//输出静态属性

echo Person::$myCountry."<br>";

//调用静态方法

Person::say();

//修改静态属性

Person::$myCountry = "中国-江苏";

echo Person::$myCountry."<br>";

?>

输出结果为:

1

2

3

中国

我的祖国是:中国

中国-江苏

类中的静态方法只能访问类的静态的属性。类中的静态的方法是不能访问类的非静态的成员的。我们用self来访问类中的静态属性。self与this相似,只不过self代表静态方法所在的类,this相似,只不过self代表静态方法所在的类,this引用指针,代表调用此方法的对象。静态方法是不用对象调用的,所有就没有this这个引用了。没有this这个引用了。没有this,就没办法调用类中的其他的成员属性。

const是一个定义常量的关键字。在类里面常用const来定义常量。用“const”修饰的成员属性的访问方式和“static”修饰的成员访问的方式差不多,也是使用“类名”,在方法里面使用“self”关键字。但是不用使用“$”符号,也不能使用对象来访问。

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

class MyClass{

 const constant = 'constant value';

 function showConstant(){

  //方法中调用常量,没有$

  echo self::constant."<br>";

 }

}

//类直接调用,没有$

echo MyClass::constant."<br>";

$class = new MyClass();

$class ->showConstant();

?>

 

  1. 象类要被子类继承,接口要被类实现。

    抽象类和接口的区别有哪些

  2. 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。

    抽象类和接口的区别有哪些

  3. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

    抽象类和接口的区别有哪些

  4. 接口是设计的结果,抽象类是重构的结果。

    抽象类和接口的区别有哪些

  5. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。

    抽象类和接口的区别有哪些

  6. 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。

    抽象类和接口的区别有哪些

  7. 抽象类主要用来抽象类别,接口主要用来抽象功能。

    抽象类和接口的区别有哪些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值