一起学习网 一起学习网


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

网络编程 详谈php静态方法及普通方法的区别 06-22

如下所示:

<?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:applicationPHPnow-1.5.6htdocsyan18typesstaticfun.php on line 32

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

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

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

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

*/ 
?>

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

PHP微信红包生成代码分享
本文实例为大家分享了PHP微信公众号自动发送红包API代码,分享给大家供大家参考。具体如下:贴出核心接口代码至于数据自己填写,接口测试OKwecha

Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
本文实例讲述了Laravel中基于ArtisanView扩展包创建及删除应用视图文件的方法。分享给大家供大家参考,具体如下:1、简介本扩展包添加了两个视图相关

Netbeans 8.2与PHP相关的新特性介绍
Netbeans8.2在这个国庆期间终于发布了,其与PHP相关的新特性主要有:支持PHP7详见前面翻译的一篇文章:Netbeans8.2将支持PHP7编辑器功能增强文档好像没有


编辑:一起学习网

标签:方法,静态,对象,视图,不需要