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 相关文章推荐
一个数据采集类
Feb 14 PHP
一家之言的经验之谈php+mysql扎实个人基本功
Mar 27 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
Jul 04 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 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的api数据接口书写实例(推荐)
2016/09/22 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
jQuery使用方法
2017/02/04 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python中functools模块函数解析
2017/03/12 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
幼儿园托班开学寄语
2014/01/18 职场文书
公司接待方案
2014/03/08 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书