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中使用preg_match_all匹配文章中的图片
Feb 06 PHP
php中{}大括号是什么意思
Dec 01 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php生成唯一的订单函数分享
Feb 02 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 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中的使用情况
2015/11/05 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
vue二级路由设置方法
2018/02/09 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
python列表操作使用示例分享
2014/02/21 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python实现通讯录功能
2018/02/22 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
基于Django统计博客文章阅读量
2019/10/29 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
客服部工作职责范本
2014/02/14 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
忠诚教育心得体会
2014/09/03 职场文书
三孔导游词
2015/02/05 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS