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&MYSQL分页原理及实现
Jan 02 PHP
php SQL之where语句生成器
Mar 24 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
WordPress自定义时间显示格式
Mar 27 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
详解PHP对数组的定义以及数组的创建方法
Nov 27 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 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 冒泡排序 交换排序法
2011/05/10 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
javascript CSS画图之基础篇
2009/07/29 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
Python zip()函数用法实例分析
2018/03/17 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python 处理string到hex脚本的方法
2018/10/26 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
PyTorch安装与基本使用详解
2020/08/31 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Django如何实现防止XSS攻击
2020/10/13 Python
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
酒店开业庆典主持词
2014/03/21 职场文书
宣传标语大全
2014/07/01 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
电子工程求职信
2014/07/17 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
党员民主评议个人总结
2014/10/20 职场文书
个人年度总结报告
2015/03/09 职场文书
从事会计工作年限证明
2015/06/23 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书