第十五节:PHP静态属性和方法

PHP面向对象编程基础

php静态,声明类属性或方法为静态,就可以不实例化类而直接访问,静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。现在静态方法常常令人难以接受,这是因为它们所起的作用与全局函数和属性基本相同,尽管它们存在于不同的名称空间中。

php静态-实例演示

php静态-实例演示

php静态-实例演示

让我们创建一个函数实现快速调试,编写index.php代码:

刷新index.php显示:

输出显示正确,这个方法有个问题,以及它刚刚存在于我们的index.php文件中的那一刻,但是如果它在别处被定义的话,我们刚才到底在哪定义?所以为什么我们不这样做把这个方法封装到类里面,在index.php创建debug类:

这看起来代码感觉很好,特别是如果我保存这些,这将在我的某个地方Jiexi命名空间,我将会知道究竟在哪里使用。每次我们想要一个东西简单得输出到屏幕上时,只实例化一个新的debug对象,可能会有点麻烦。那么如果我们不必先实例化这个类呢?那么,这就是静态方法。清除类属性或静态方法使得它们无需实例化类即可访问。

现在记住这是经常看不惯的做法,但是自从静态在OOP手册,给几个例子后就感觉很自然了。现在,我需要做的是在一个普通的类里面创建一个静态方法,并在前面添加关键字static:

从现在开始,我不必再实例化那个Debug类来访问$post,我们能用static属性吗?例如:

访问index.php显示:

正常工作,我们添加多一个static $foo = ‘bar’,我们可以在类外面访问这个$foo属性:

事实上,你可以实例化这个类,只有它不会像你期望的那样对象一样操作,这就是为什么静态往往是让人皱眉,那是因为他们的行为不像真正的对象。让我们注释Debug::dump($post)和echo Debug::$foo,添加$dumper = new debug(),再echo self::$wrapperStart,添加不同的值,在类外面赋值,代码如下:

让我们在创建另外一个dumper的对象:

如果有两个不同的对象,接着将会输出New ValueNew Value,并且anotherDumper输出pre,像默认值那个只是定义在这个debug类。反之,我们看到是第二次循环。简单的说,其实我们是想看到两个不同的值,实际上是相同的值。静态给我们编码带来很大的便利,但是他们不像真正的对象那样处理事情。

下载本课堂完整源码

接近10年的互联网从业经验,精通Scrum敏捷软件开发的方法,从事互联网产品设计,开发,测试,运营,案例不少于20个,发现自己最喜欢的工作是做外贸营销,外贸SEO,特别喜欢谷歌优化。从2017年3月开始坚持在群161510483直播谷歌SEO和WEB前端开发技术,只要加进来坚持学习零基础也能够学会。

Last modified: 2019年1月26日

Previous Story

PHP面向对象编程基础

第十四节:PHP对象接口

对象接口:指定某个类须实现哪些方法但不要定义这些方法的内容,正如我们之前所看到的那样,对抽象类有一定的益处,这是在类之间共享可重用代码的好方法.

...

Next Story

PHP面向对象编程基础

第十六节:php traits

php traits:PHP的单继承语言而准备的一种代码复用机制,Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method.

...