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 相关文章推荐
PHP 压缩文件夹的类代码
Nov 05 PHP
php学习之 循环结构实现代码
Jun 09 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 PHP
Symfony查询方法实例小结
Jun 28 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 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)
2007/11/23 PHP
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Python 实现微信防撤回功能
2019/04/29 Python
Apache部署Django项目图文详解
2019/07/30 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
研修第一天随笔感言
2014/02/15 职场文书
葬礼司仪主持词
2014/03/31 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
赢在中国观后感
2015/06/02 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
MySQL读取JSON转换的方式
2022/03/18 MySQL