详谈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 相关文章推荐
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
PHP遍历目录并返回统计目录大小
Jun 09 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP性能优化大全(php.ini)
May 20 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
设定php简写功能的方法
Nov 28 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用正则表达式匹配中文实例详解
2013/11/06 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
Python单链表简单实现代码
2016/04/27 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
python 内置函数filter
2017/06/01 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Python简单基础小程序的实例代码
2019/04/28 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
党员实事承诺书
2014/03/26 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
责任书范本
2014/08/25 职场文书
自查自纠工作总结
2014/10/15 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
施工员岗位职责
2015/02/10 职场文书