"OK",);}}请回答问题:如何得到'0'?错误方法1类测试扩展了ConstantOne{}ECHOtest::init_ERRNO_OK();方法一原因:PHPFatalerror:Classtestmaynotinheritfromfinalclass(ConstantOne)错误方法2var_dump(ConstantOne::init_ErrorMsg());方法2原因:PHPFatalerror:UncaughtError:CalltoprotectedmethodConstantOne::init_ErrorMsg()如果我想到了staitc,我可以不实例化调用它,protected,你可以实例化这个类或者调用父类,但是关键就是有最后的修改。final修饰的类不能被继承,所以只能被本类调用,非实例类调用的静态方法称为protected。static本性质是类的方法,解决思路/***常量管理的基类*/abstractclassBaseConstant{/***不要实例化这个类*/protectedfunction__construct(){}/***获取常量value*@paramstring$constant*@returnmixed*/publicstaticfunctionget($constant){if(is_null(static::$$constant)){//echosprintf('static::init_%s',$持续的);static::$$constant=call_user_func(sprintf('static::init_%s',$constant));}返回静态::$$常量;}}finalclassConstantTwoextendsBaseConstant{staticprotected$ERRNO_OK;静态保护函数init_ERRNO_OK(){返回100;}staticprotectedfunctioninit_ErrorMsg(){returnarray(100=>"OK",);}//下面这也可以publicstaticfunctionoutOK(){echostatic::init_ERRNO_OK();}}echoConstantTwo::get('ERRNO_OK');echoConstantTwo::outOK();
