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 相关文章推荐
拼音码表的生成
Oct 09 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP程序员的技术成长规划
Mar 25 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
PHP实现支持CURL字符串证书传输的方法
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
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
node.js中的console用法总结
2014/12/15 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
python中正则表达式的使用方法
2018/02/25 Python
python中logging包的使用总结
2018/02/28 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Django框架验证码用法实例分析
2019/05/10 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
关于python 跨域处理方式详解
2020/03/28 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
四年级数学教学反思
2014/02/02 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
员工考核评语大全
2014/04/26 职场文书
学校端午节活动总结
2015/02/11 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
Consul在linux环境的集群部署
2022/04/08 Servers
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技