php中冒号是什么,在PHP中:(双冒号)和-(箭头)有什么区别?
當左側部分是對象實例時,可以使用->..否則,您將使用::.
這意味著->主要用于訪問實例成員(盡管它也可用于訪問靜態成員,但不鼓勵這種使用),而::通常用于訪問靜態成員(盡管在一些特殊情況下,它用于訪問實例成員)。
總體而言,::用于范圍分辨率,它可能有一個類名,parent,?self,或(在PHP 5.3中)static在左邊。parent指所使用的類的超類的作用域;self指使用它的類的作用域;static指“被調用的范圍”(請參見后期靜態綁定).
規則是::是實例調用當且僅當:目標方法未聲明為靜態方法。
和
調用時有一個兼容的對象上下文,這意味著這些內容必須為真:調用是從以下上下文發出的
$this存在和
.的階級
$this是正在調用的方法的類或它的子類。
例子:class?A?{
public?function?func_instance()?{
echo?"in?",?__METHOD__,?"\n";
}
public?function?callDynamic()?{
echo?"in?",?__METHOD__,?"\n";
B::dyn();
}}class?B?extends?A?{
public?static?$prop_static?=?'B::$prop_static?value';
public?$prop_instance?=?'B::$prop_instance?value';
public?function?func_instance()?{
echo?"in?",?__METHOD__,?"\n";
/*?this?is?one?exception?where?::?is?required?to?access?an
*?instance?member.
*?The?super?implementation?of?func_instance?is?being
*?accessed?here?*/
parent::func_instance();
A::func_instance();?//same?as?the?statement?above
}
public?static?function?func_static()?{
echo?"in?",?__METHOD__,?"\n";
}
public?function?__call($name,?$arguments)?{
echo?"in?dynamic?$name?(__call)",?"\n";
}
public?static?function?__callStatic($name,?$arguments)?{
echo?"in?dynamic?$name?(__callStatic)",?"\n";
}}echo?'B::$prop_static:?',?B::$prop_static,?"\n";echo?'B::func_static():?',?B::func_static(),?"\n";$a?=?new?A;$b?=?new?B;echo?'$b->prop_instance:?',?$b->prop_instance,?"\n";//not?recommended?(static?method?called?as?instance?method):echo?'$b->func_static():?',?$b->func_static(),?"\n";echo?'$b->func_instance():',?"\n",?$b->func_instance(),?"\n";/*?This?is?more?tricky
*?in?the?first?case,?a?static?call?is?made?because?$this?is?an
*?instance?of?A,?so?B::dyn()?is?a?method?of?an?incompatible?class
*/echo?'$a->dyn():',?"\n",?$a->callDynamic(),?"\n";/*?in?this?case,?an?instance?call?is?made?because?$this?is?an
*?instance?of?B?(despite?the?fact?we?are?in?a?method?of?A),?so
*?B::dyn()?is?a?method?of?a?compatible?class?(namely,?it's?the
*?same?class?as?the?object's)
*/echo?'$b->dyn():',?"\n",?$b->callDynamic(),?"\n";
產出:B::$prop_static:?B::$prop_static?value
B::func_static():?in?B::func_static
$b->prop_instance:?B::$prop_instance?value
$b->func_static():?in?B::func_static
$b->func_instance():
in?B::func_instance
in?A::func_instance
in?A::func_instance
$a->dyn():
in?A::callDynamic
in?dynamic?dyn?(__callStatic)
$b->dyn():
in?A::callDynamic
in?dynamic?dyn?(__call)
總結
以上是生活随笔為你收集整理的php中冒号是什么,在PHP中:(双冒号)和-(箭头)有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文章章节常用序号编排(数字序号顺序)
- 下一篇: 动态规划算法php,php算法学习之动态