php静态方法和实例方法的区别

时间:2017.01.12 发布人:该罚的的

php静态方法和实例方法的区别

已解决问题

谷歌该罚的的用户在2017.01.12提交了关于“逸动php静态方法和实例方法的区别”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-07-27T20:49:07。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,千言万语,表达不了我的感激之情,我已铭记在心 !

希望以下的回答,能够帮助你。

第1个回答

用户名:taobingli  

<?php
header('c关晶厂黑复计湖ontent-type:text/html;charset=utf-8');
/*
普通方法,存放类内,只有一份
静态方法,也是存放于类内来自,只有一份
区别在于:普通方法需要对象去调用,需要绑定$this
即,普通方法,必须要有对象,然后让对象来调用
而静态方法,不属于哪一个对象,因此不需要绑定$this
即,不需要对象也可以调用
*/
classh**uman{
staticpublic$head=1;
publicfunctioneasyeat(){
echo'普通方法吃饭<br/>';
}
staticpublicfunc331215问答tioneat(){
echo'静态方法吃饭<b减养r/>';
}
publicfun神讲了球杨际练ctionintro(){
echo$this->name;
}
}
Error_repo称优负优rting(E_ALL|E_STRICT);
//此时没有对象!方法可以执行
h**uman::eat()责脱尔标力硫身热重左;
/*
以下方法easyeat是一个非静态方法,就由对象来调用,但,用类来调用此方法来也可以执行,而严格状态下,此方法会执行,同时报错,
Stri职胞样饭声ctStandards:Non-staticmethodh**uman::easyeat()shouldnotbecalledstaticallyinD:\application\Ph**Pnow沙须似留-1.5.6\htdocs\yan18\types\staticfun.phponline32
*/
h**uman::easyeat();
/*
接上,从逻辑来理解,如果用类名静态调用非静态(普通)方法
比如:intro()
那么,这个$this是指哪个对象呢??
因此会报错,因为找不到对象!
Fatalerror:U临达欢sing$thiswhenn德较部那otinobjectco伤ntextinD:\application\Ph**Pnow-1.5.6\htdocs\yan18\types\staticfun.phponline23
*天著/
h**uman::intro();
/*
如上分析,械其实,非静态方法,是不能由类名静态调用的,但目前,php中沉断新状班业精外的面向对象检测不够严格,只要静态方法中没有$th增行列象界东角烟is关键字,就会转化成静态方法来处理!
*/
$li=newh**uma领n();
$li->eat();
/*
总结:
类》访问->静态方法(类的方法)->可以
类》访问->普通方法(对象的方法)->不可以(虽然方法里不用$this关键字时,可以!但不支持这种写法)
对象》访问》静态方法(类的方法)->可以
对象》访问》普通方法(对象的方法)->可以
斗*/
?>