PHP中static关键字以及与self关键字的区别
发布:smiling 来源: PHP粉丝网 添加日期:2021-06-06 22:36:47 浏览: 评论:0
这篇文章主要介绍了PHP中static关键字以及与self关键字的区别,本文讲解了static关键字的定义、迟绑定(Late Static Bindings)、以及与self关键字的区别等内容,需要的朋友可以参考下。
概述
正在学习设计模式,之前有一篇文章关于单例模式的文章,重新读了这篇文章,发现对static关键字掌握不是很牢靠,重新温习一下。
static关键字
PHP手册里对static关键字的介绍如下:
Declaring class properties or methods as static makes them accessible without needing an instantiation of the class. A property declared as static cannot be accessed with an instantiated class object (though a static method can).
大体意思是,将类的属性和方法声明为静态以后,可以直接访问静态属性和方法,而不需要实例化对象。
PHP中静态成员和方法的特性如下:
1.静态成员不能通过类的实例访问,但是静态方法可以。
2.静态成员不能通过->运算符访问。
3.在静态方法的作用域中,不能出现$this关键字,也就是说不能在静态方法中访问普通的成员变量。
4.静态成员和方法,都可以通过类名直接访问,而无需实例化对象。
迟绑定(Late Static Bindings)
下面的内容摘自PHP手册:
自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。
准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类。所谓的“转发调用”(forwarding call)指的是通过以下几种方式进行的静态调用:self::,parent::,static:: 以及 forward_static_call()。可用 get_called_class() 函数来得到被调用的方法所在的类名,static:: 则指出了其范围。
对该特性的理解,可以参考下手册中的例子
self vs static
用一个demo来直接说明self与static的区别。
self示例:
- <?php
- class Vehicle {
- protected static $name = 'This is a Vehicle';
- public static function what_vehicle() {
- echo get_called_class()."\n";
- echo self::$name;
- }
- }
- class Sedan extends Vehicle {
- protected static $name = 'This is a Sedan';
- }
- Sedan::what_vehicle();
程序输出:
Sedan
This is a Vehicle
static示例:
- <?php
- class Vehicle {
- protected static $name = 'This is a Vehicle';
- public static function what_vehicle() {
- echo get_called_class()."\n";
- echo static::$name;
- }
- }
- class Sedan extends Vehicle {
- protected static $name = 'This is a Sedan';
- }
- Sedan::what_vehicle();
程序输出:
Sedan
This is a Sedan
总结:看看上一篇文章,已经一个多月没更新过博客了,忙是一部分,主要的还是自己懈怠了,以后还得坚持,这篇文章写的也有点没感觉。
Tags: static self
- 上一篇:PHP多态代码实例
- 下一篇:PHP之预定义接口详解
相关文章
- ·PHP面向对象之旅:static变量与方法(2014-01-17)
- ·php中$this、static、final、const、self的用法(2014-02-10)
- ·php面向对象 static、 const、final关键字的使用(2014-03-28)
- ·php final static const成员属性用法(2014-05-21)
- ·php static 变量的例子(2014-06-04)
- ·PHP static静态局部变量和静态全局变量总结(2014-06-14)
- ·php中接口、抽象类、Final、Static例子(2016-07-27)
- ·php中static 静态变量和普通变量的区别(2016-08-18)
- ·区别PHP中的const,static,public,private,protected(2020-02-22)
- ·PHP面向对象之旅:深入理解static变量与方法(2020-08-23)
- ·php面向对象中static静态属性和静态方法的调用(2021-05-10)
- ·php面向对象中static静态属性与方法的内存位置分析(2021-05-10)
- ·开启PHP Static 关键字之旅模式(2021-06-26)
- ·php面向对象编程self和static的区别(2021-08-01)
- ·php面向对象程序设计中self与static的区别分析(2021-11-22)
- ·PHP面向对象程序设计中的self、static、parent关键字用法分析(2021-12-11)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)