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 相关文章推荐
Ajax PHP简单入门教程代码
Apr 25 PHP
PHP 字符串 小常识
Jun 05 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
Zend Framework教程之Zend_Db_Table用法详解
Mar 21 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 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 jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
php从字符串创建函数的方法
2015/03/16 PHP
php上传excel表格并获取数据
2017/04/27 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
Python语法快速入门指南
2015/10/12 Python
详解如何使用Python编写vim插件
2017/11/28 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
文员岗位职责
2013/11/09 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
安全生产责任书
2014/03/12 职场文书
公证委托书标准格式
2014/09/11 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
人民币符号
2022/02/17 杂记