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与javascript对多项选择的处理
Oct 09 PHP
mysql5的sql文件导入到mysql4的方法
Oct 19 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
php之readdir函数用法实例
Nov 13 PHP
PHP curl使用实例
Jul 02 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
php实现文件预览功能
May 23 PHP
微信接口生成带参数的二维码
Jul 31 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 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语法速查表
2006/12/06 PHP
php 字符转义 注意事项
2009/05/27 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
javascript实现密码验证
2015/11/10 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
python入门前的第一课 python怎样入门
2018/03/06 Python
详解python多线程之间的同步(一)
2019/04/03 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
社区中秋节活动方案
2014/01/29 职场文书
个人贷款收入证明
2014/10/26 职场文书
2015年父亲节寄语
2015/03/23 职场文书
收入证明怎么写
2015/06/12 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
Python多个MP4合成视频的实现方法
2021/07/16 Python