详谈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 相关文章推荐
利用static实现表格的颜色隔行显示
Oct 09 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
php判断是否为json格式的方法
Mar 04 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
codeigniter实现get分页的方法
Jul 10 PHP
php实现用户登陆简单实例
Apr 04 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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
php array_intersect()函数使用代码
2009/01/14 PHP
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
Python 含参构造函数实例详解
2017/05/25 Python
详解Python是如何实现issubclass的
2019/07/24 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
StubHub德国:购买和出售门票
2017/09/06 全球购物
圣诞节活动策划方案
2014/06/09 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
长江三峡导游词
2015/01/31 职场文书
《我是什么》教学反思
2016/02/16 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript