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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
将php数组输出html表格的方法
Feb 24 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
PHP使用反向Ajax技术实现在线客服系统详解
Jul 01 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
vue实现简单学生信息管理
2020/05/30 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python实现交并比IOU教程
2020/04/16 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
animation和transition的区别
2020/10/12 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
怎样写好自荐信和推荐信
2013/12/26 职场文书
党校培训思想汇报
2014/01/03 职场文书
旅游项目开发策划书
2014/01/18 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
文明单位申报材料
2014/12/23 职场文书
党纪处分决定书
2015/06/24 职场文书