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 相关文章推荐
function.inc.php超越php
Dec 09 PHP
用PHP实现图象锐化代码
Jun 14 PHP
php ss7.5的数据调用 (笔记)
Mar 08 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
laradock环境docker-compose操作详解
Jul 29 PHP
php pdo连接数据库操作示例
Nov 18 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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写的采集程序
2007/03/16 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
GMP办公室主任岗位职责
2014/03/14 职场文书
课程改革实施方案
2014/03/16 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL