Declaringclassmembersormethodsasstaticmakesthemaccessiblewithoutneedinganinstantiationoftheclass.Amemberdeclaredasstaticcannotbeaccessedwithaninstantiatedclassobject(thoughastaticmethodcan).
声明静态的类变量和方法可以不需要实例化类对象的情况下对他们进行调用。静态类不能被类对象调用。(类的静态方法可以)。//注意看第一个例子,在一个非静态的方法中调用了静态的变量。唯一的不同是用了self。难道用了self就可以????不知道???需要一个试验。
Thestaticdeclarationmustbeafterthevisibilitydeclaration.ForcompatibilitywithPHP4,ifnovisibilitydeclarationisused,thenthememberormethodwillbetreatedasifitwasdeclaredaspublic.
静态声明必须必须是显式的声明。为了兼容PHP4,如果没有显式声明的对象或者方法,被当作声明为public。
Becausestaticmethodsarecallablewithoutaninstanceoftheobjectcreated,thepseudovariable$thisisnotavailableinsidethemethoddeclaredasstatic.
因为静态方法不需要实例化类对象来调用,所以伪变量$this在静态方法中也是不可用的。
Infactstaticmethodcallsareresolvedatcompiletime.Whenusinganexplicitclassnamethemethodisalreadyidentifiedcompletelyandnoinheritancerulesapply.Ifthecallisdonebyselfthenselfistranslatedtothecurrentclass,thatistheclassthecodebelongsto.Herealsonoinheritancerulesapply.
实际上,静态的方法调用在编译时已经确定了。(这段我不会翻译。???不明白???)
求了很久求来的翻译如下:
------------------------------------------------
实际上,静态方法的调用在编译时解决。当使用一个明确的类名时,方法已经被完全识别而不需要应用继承规则。如果由自身调用,那么自身被解析成当前的类,也就是代码所属的类。这里也没有应用继承规则。
但是一个新的问题:
这里不一定有继承产生,为什么会提到继承规则?(???不明白????)
Staticpropertiescannotbeaccessedthroughtheobjectusingthearrowoperator->.Callingnon-staticmethodsstaticallygeneratesanE_STRICTlevelwarning.
静态成员不能被类的对象通过箭头符号->来调用。静态的调用一个非静态方法会导致一个E_STRICT级别的警告。
静态成员例:
复制代码 代码如下:classFoo
{
publicstatic$my_static='foo';
publicfunctionstaticValue(){
returnself::$my_static;//注意这里!!!!
//return$my_static;//这样写会不会出错。需要试验
}
}
classBarextendsFoo
{
publicfunctionfooStatic(){
returnparent::$my_static;//注意这里!!!!
}
}
printFoo::$my_static."n";
$foo=newFoo();
print$foo->staticValue()."n";
print$foo->my_static."n";//未定义的"Property"my_static
//$foo::my_staticisnotpossible
printBar::$my_static."n";
$bar=newBar();
print$bar->fooStatic()."n";
静态方法例:
classFoo{
publicstaticfunctionaStaticMethod(){
//...
}
}
Foo::aStaticMethod();