详谈php静态方法及普通方法的区别


Posted in PHP onOctober 04, 2016

如下所示:

<?php 
header('content-type:text/html;charset=utf-8'); 
/* 
普通方法,存放类内,只有一份

静态方法,也是存放于类内,只有一份

区别在于:普通方法需要对象去调用,需要绑定$this 
即,普通方法,必须要有对象,然后让对象来调用 

而静态方法,不属于哪一个对象,因此不需要绑定$this 
即,不需要对象也可以调用 
*/

class Human{ 
  static public $head=1; 
  public function easyeat(){ 
    echo '普通方法吃饭<br />'; 
  } 
  static public function eat(){ 
    echo '静态方法吃饭<br />'; 
  } 
  public function intro(){ 
    echo $this->name; 
  } 
} 
Error_reporting(E_ALL|E_STRICT); 
//此时没有对象!方法可以执行 
Human::eat(); 
/* 
以下方法easyeat是一个非静态方法,就由对象来调用,但,用类来调用此方法来也可以执行,而严格状态下,此方法会执行,同时报错, 
Strict Standards: Non-static method Human::easyeat() should not be called statically in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 32

*/ 
Human::easyeat(); 
/* 
接上,从逻辑来理解,如果用类名静态调用非静态(普通)方法 
比如:intro() 
那么,这个$this是指哪个对象呢?? 
因此会报错,因为找不到对象! 
Fatal error: Using $this when not in object context in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 23 
*/ 
Human::intro();

/* 
如上分析,其实,非静态方法,是不能由类名静态调用的,但目前,php中的面向对象检测不够严格,只要静态方法中没有$this关键字,就会转化成静态方法来处理! 
*/ 
$li=new Human(); 
$li->eat();

/* 
总结: 
类》访问->静态方法(类的方法)->可以 
类》访问->普通方法(对象的方法)->不可以(虽然方法里不用$this关键字时,可以!但不支持这种写法)

对象》访问》静态方法(类的方法)->可以 
对象》访问》普通方法(对象的方法)->可以

*/ 
?>

以上就是小编为大家带来的详谈php静态方法及普通方法的区别全部内容了,希望大家多多支持三水点靠木~

PHP 相关文章推荐
第十一节--重载
Nov 16 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
PHP 防恶意刷新实现代码
May 16 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
php实现可用于mysql,mssql,pg数据库操作类
Dec 13 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
php去除二维数组的重复项方法
Nov 03 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
php数值计算num类简单操作示例
May 15 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 PHP
php操作路径的经典方法(必看篇)
Oct 04 #PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 #PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 #PHP
PHP图片添加水印功能示例小结
Oct 03 #PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 #PHP
PHP实现生成带背景的图形验证码功能
Oct 03 #PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 #PHP
You might like
微信支付开发发货通知实例
2016/07/12 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
vue实现分页栏效果
2019/06/28 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python中为什么要用self探讨
2015/04/14 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
中国梦团日活动总结
2014/07/07 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
检讨书范文
2019/04/16 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
浅谈redis整数集为什么不能降级
2021/07/25 Redis