4.0 类常量和静态成员

通过上几篇博客我们了解到,类在实例化对象时,该对象中的成员只被当前对象所有。如果希望在类中定义的成员被所有实例共享。

此时可以使用类常量或静态成员来实现,接下来将针对类常量和静态成员的相关知识进行详给讲解。

4.1 类常量

在类中,有些属性的值不能改变,并且希望被所有对象所共享,例如圆周率,它是个数学常数,在数学物理计算中广泛使用,此时可以将表示圆周率的成员属性定义为常量。类常量在定义时需要使用const关键字来申明。示例代码如下:

const PI=3.1415926; //定义一个常量属性PI

上述示例代码中,使用const关键字来声明常量,常量名前不需要添加$符号,并且在声明的同时必须对其进行初始化工作。为了方便更好地理解类常量,接下来通过一个案例来学习类常量的使用和声明,如例4-8所示,

例4-8

public functionshow(){echo MathTool::PI."
"; //通过类名访问

}public functiondisplay(){echo self::PI."
"; //通过self关键字访问

}

}echo MathTool::PI."
"; //在类外部直接访问

$obj = new MathTool(); //实例化一个对象

$obj->show();$obj->display();?>

运行结果

在例4-8中,定义了一个类常量P1.由于在类中声明的常量PI是属于类本身而非对象的、所以需要使用范围解析操作符(:)来连接类名和类常量来访问。如果在类的内部访问类常量,还可以使用关键字self来代替类名,最后将常量的值输出。

需要注意的是,在类中定义的常量只能是基本数据类型的值,而且必须是一个定值。不能是变量、类的属性、数学运算的结果或函数调用。类常量一旦设置后就不能改变,如果试图在程序中改变它的值,则会出现错误。且在声明类常量时一定要赋初始值,因为后期没有其他方式为其赋值。

4.2 静态成员

在上一小节学习了类常量,它是属于类的、可以实现类的所有对象共享一份数据。当然在类中使用静态成员也可以达到同样的效果,静态成员被static关键字修饰,它不属于任何对象,只属于类。静态成员包括静态属性和静态方法。接下来分别进行详细讲解。

1.静态属性

有时候。我们希望某此特定的数据在内存中只有一份,并且可以被类的所有实例对象所出享。例如某个学校所有学生共享-一个学校名称,此时完全不必在每个学生对象所古用的内存办间都定又一个字段来存储这个学校名称,可使用静态属性来表示学校名称让所有对象来共享

定义静态属性的语法格式如下:

访问修饰符 static 变量名

在上述语法格式中,static 关键字写在访问修饰符的后面,访问修饰符可以省略,默认为public 为了更好地理解静态属性。接下来通过一个案例来演示,如例4-9所示。

例4-9

1 <?php2 classStudent{3 //定义show()方法,输出学生的学校名称

4 public static $SchoolName="艾利斯顿商学院";5 public functionshow (){6 echo "我的学校是:".self::$SchoolName."
";7 }8 }9 $stu1=newStudent();10 $stu2=newStudent();11 echo "学生1:
";12 $stu1->show();13 echo "学生2:
";14 $stu2->show();15 ?>

运行结果

在例4-9中。学生1和学生2的学校都是 艾利斯顿商学院,这是由于在Student类中定又了一个静态字段schoolName. 该字段会被所有Student类的实例共享,因此在调用学生1和学生2的show()方法时,均输出”我的学校是:艾利斯顿商学院

需要注意的是,静态属性是属于类而非对象,所以不能使用“对象->属性”的方式来访问,面应该通过“类名:属性”的方式来访问,如果是在类的内部,还可以使用self关键字代替类名。

2 静态方法

有时我们希望在不创建对象的情况下就可以调用某个方法,也就是使该方法不必和对象绑在一起。要实现这样的效果,可以使用静态方法 静态方法在定义时只需在方法名前加上static关键字,其语法格式如下:

访问修饰符 static 方法名()

静态方法的使用规则和静态属性相同,即通过类名称和范围解析操作符(:)来访问静态方法。接下来通过一个案例来学习静态方法的使用,如例4-10所示。

1 <?php2 classStudent{3 //定义show()方法,输出学生的学校名称

4 public static $schoolName="艾利斯顿商学院";5 public static functionshow (){6 echo "我的学校是:".self::$schoolName;7 }8 }9 Student::show();10 ?>

运行结果

在例4-10中,代码第4行中定又了一个静态属性schoolName. 在第5~ 7行代码中,定又了一个静态方法用来输出学生所在学校的名称。在第9行代码中通过“类名:方法名”的形式调用了Student 类的静态方法,在静态方法中访向了静态属性$SchoolName.通常情况下静态方法是用未操作静态属性的。

注意:在静态方法中,不要使用$this.因力静态方法是属于关的,而$this则是指对象上下文。在静态方法中,一般只对静态属性进行操作。

php面向对象静态常量,浅谈PHP面向对象编程(四、类常量和静态成员)相关推荐

  1. 面向过程、面向函数、面向对象的区别浅谈

    Python的面向过程.面向函数.面向对象的区别浅谈 转自--猎奇古今,加上其他 有人之前私信问我,python编程有面向过程.面向函数.面向对象三种,那么他们区别在哪呢? 面向过程就是将编程当成是做 ...

  2. 浅谈对java编程思想的理解

    浅谈对java编程思想的理解 刚从学校毕业的时候,对于这种概念的理解少之又少 ,只是单纯的从事编码工作,理解也只是停留在对java基本概念的使用上,很局限!随后工作了快三年的时间里,自己不断的理解这种 ...

  3. python编写函数_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  4. python采用函数编程模式_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  5. python采用函数式编程模式-浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  6. 浅谈 C++ 元编程

    随着 C++ 11/14/17 标准的不断更新,C++ 语言得到了极大的完善和补充.元编程作为一种新兴的编程方式,受到了越来越多的广泛关注.结合已有文献和个人实践,对有关 C++ 元编程进行了系统的分 ...

  7. 浅谈 Windows API 编程

    原文地址:http://blog.sina.com.cn/s/blog_46d85b2a01010qpt.html http://blog.sina.com.cn/s/articlelist_1188 ...

  8. java四种内部类区别_浅谈Java中的四种内部类

    如果你看过一些JDK和框架源码的话,就经常会发现一般在类的定义中,都会再定义一些其他的类,这些类也同样会被编译成字节码文件,这样的类就被叫做 内部类 ,按照一般的分法,大致可以分为以下四类: 成员内部 ...

  9. 浅谈 js 面向对象

    目录 前言叙述(对象,类) 工厂模式 构造函数 原型 最后 前言叙述(对象,类) 我们想来思考一个问题,对象是什么.简言之,包含属性和方法的就是对象.属性是静态的,通常写在构造函数中,方法是动态的,公 ...

最新文章

  1. 几经沉浮,人工智能前路何方?
  2. Ipython 和 python 的区别
  3. scala for循环
  4. Boost:双图bimap与mi_hashed indices索引的测试程序
  5. 【ubuntu-qt-dlib】 配置问题 (一) undefined reference to `XPending'
  6. mysql启动报错:Another MySQL daemon already running with the same unix socket.
  7. OpenCV_03 图像的算数操作:图像的加法+图像的混合
  8. WPF e.Systemkey的一个坑
  9. python爬取b站评论_用python 抓取B站视频评论,制作词云
  10. Linux中查看socket进程状态
  11. 向爸爸借了500,向妈妈借了500,买了双皮鞋用了970。剩下30元,还爸爸10块,还妈妈10块,自己剩下了10块,欠爸爸490,欠妈妈490,490+490=980。加上自己的10块=990。还有1
  12. Powerpoint中VBA编程技巧
  13. PMP课程笔记:第10章 项目沟通管理
  14. 【前端】使用html+css+js实现的乞丐版跳一跳
  15. 计算机开机后黑屏一闪一闪怎么办,Win7开机后黑屏左上角光标闪烁的解决方法...
  16. Android Studio自带图标制作利器 Image Asset Studio
  17. 工控机的日常维护方法及步骤
  18. 程序员:被问“刚毕业吧”,憋一口老血如何回击?网友:不理睬!
  19. visual studio 2010 怎么显示行号
  20. [软件教程]专业屏幕捕捉软件 HyperSnap-DX 使用教程

热门文章

  1. 第二项目AIaisell(易销宝)
  2. Python-Django配置阿里大于的短信验证码接口
  3. CentOS7.4下DNS服务器软件BIND安装及相关的配置(一)
  4. Android控件点击圆形阴影反馈解决方案
  5. 超全面的JavaWeb笔记day02CSSJavaScript
  6. Technavio:大数据即服务将迎快速增长期
  7. MarkdownPad2.5 注册码
  8. Linux SWAP分区占用率高,刷新SWAP分区方法
  9. 把一台Cisco路由器配置为帧中继交换机
  10. log4j.logger java_log4j的多logger记录日志的简明使用