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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
php构造函数实例讲解
Nov 13 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP实现图片批量打包下载功能
Mar 01 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
php 分页函数multi() discuz
2009/06/21 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php静态文件生成类实例分析
2015/01/03 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
javascript cookies操作集合
2010/04/12 Javascript
js对象的比较
2011/02/26 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
Python实现的选择排序算法示例
2017/11/29 Python
Windows下python3.6.4安装教程
2018/07/31 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
pytorch 共享参数的示例
2019/08/17 Python
python logging设置level失败的解决方法
2020/02/19 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
在keras中实现查看其训练loss值
2020/06/16 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
平面设计的岗位职责
2013/11/08 职场文书
关于元旦的广播稿
2014/02/16 职场文书
数控专业自荐书范文
2014/03/16 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
情侣之间的道歉短信
2015/05/12 职场文书