php面向对象编程self和static的区别


Posted in PHP onMay 08, 2016

在php的面向对象编程中,总会遇到

class test{
 public static function test(){
  self::func();

  static::func();
 }

 public static function func(){}
}

可你知道self和static的区别么?

其实区别很简单,只需要写几个demo就能懂:

Demo for self:

class Car
{
 public static function model(){
  self::getModel();
 }

 protected static function getModel(){
  echo "This is a car model";
 }
}

Car::model();

Class Taxi extends Car
{
 protected static function getModel(){
  echo "This is a Taxi model";
 }
}

Taxi::model();
得到输出

This is a car model
This is a car model

可以发现,self在子类中还是会调用父类的方法

Demo for static

class Car
{
 public static function model(){
  static::getModel();
 }

 protected static function getModel(){
  echo "This is a car model";
 }
}

Car::model();

Class Taxi extends Car
{
 protected static function getModel(){
  echo "This is a Taxi model";
 }
}

Taxi::model();

得到输出

This is a car model
This is a Taxi model

可以看到,在调用static,子类哪怕调用的是父类的方法,但是父类方法中调用的方法还会是子类的方法(好绕嘴。。)

在PHP5.3版本以前,static和self还是有一点区别,具体是什么,毕竟都是7版本的天下了。就不去了解了。

总结呢就是:self只能引用当前类中的方法,而static关键字允许函数能够在运行时动态绑定类中的方法。

PHP 相关文章推荐
基于HTTP长连接的"服务器推"技术的php 简易聊天室
Oct 31 PHP
PHP源代码数组统计count分析
Aug 02 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 PHP
Laravel与CI框架中截取字符串函数
May 08 #PHP
PHP框架性能测试报告
May 08 #PHP
Thinkphp单字母函数使用指南
May 08 #PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 #PHP
PHP+Ajax+JS实现多图上传
May 07 #PHP
php实现图片上传、剪切功能
May 07 #PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 #PHP
You might like
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
一个javascript参数的小问题
2008/03/02 Javascript
javascript multibox 全选
2009/03/22 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
解析vue中的$mount
2017/12/21 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
python文件比较示例分享
2014/01/10 Python
python获得图片base64编码示例
2014/01/16 Python
浅谈django orm 优化
2018/08/18 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
Python requests设置代理的方法步骤
2020/02/23 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
护士的自我鉴定
2014/02/07 职场文书
教学改革实施方案
2014/03/31 职场文书
成绩单家长评语大全
2014/04/16 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
员工工作心得体会
2019/05/07 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android