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中global和$GLOBALS[]的分析之一
Feb 02 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
Sublime里直接运行PHP配置方法
Nov 28 PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php微信支付之APP支付方法
Mar 04 PHP
php示例详解Constructor Prototype Pattern 原型模式
Oct 15 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
什么是命名空间(NameSpace)
2015/11/24 面试题
工厂保洁员岗位职责
2013/12/04 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
大学生党员自我批评
2014/02/14 职场文书
九九重阳节致辞
2015/07/31 职场文书
python urllib库的使用详解
2021/04/13 Python
Feign调用传输文件异常的解决
2021/06/24 Java/Android
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS