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 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
php微信开发之谷歌测距
Jun 14 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
Python操作CouchDB数据库简单示例
2015/03/10 Python
使用Python写个小监控
2016/01/27 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python计算auc指标实例
2017/07/13 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
财政专业求职信范文
2014/02/19 职场文书
内衣营销方案
2014/03/15 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书