详谈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 中的输出缓冲
Dec 21 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
php调用dll的实例操作动画与代码分享
Aug 14 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
浅谈PHP7中的一些小技巧
May 29 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 删除数组元素
2009/01/16 PHP
php adodb操作mysql数据库
2009/03/19 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
win10系统中安装scrapy-1.1
2016/07/03 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python实现ping命令小程序
2020/12/28 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
九年级政治教学反思
2014/02/06 职场文书
高中毕业自我评价
2014/02/08 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
详解python的异常捕获
2022/03/03 Python