详谈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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
php 生成随机验证码图片代码
Feb 08 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
PHP中有关长整数的一些操作教程
Sep 11 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中Closure类的使用方法及详解
2015/10/09 PHP
php利用header函数下载各种文件
2016/08/24 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python用GET方法上传文件
2015/03/10 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python实现顺序表的简单代码
2018/09/28 Python
用Django写天气预报查询网站
2018/10/21 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
英文版网络工程师求职信
2013/10/28 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
高中政治教师教学反思
2016/02/23 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
用JS创建一个录屏功能
2021/11/11 Javascript
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL