我今天才注意到这种行为-很奇怪,我很确定在java中你只能访问继承链上游的protected方法,因为另一种方式违反了封装。语言中有这种行为的原因吗? 最佳答案 我发现当在父类中定义的一个方法只需要根据扩展类类型更改其功能的一小部分时,它很有用。您可以从父类中调用抽象方法,并且它的功能会根据需要随着子类中该方法的定义而改变。我还要补充一点,兄弟类也可以访问彼此的protected属性和方法,只要它们在父类中声明(可以是抽象的也可以不是)。 关于php-php父类(superclass)如
所以,基本上我有以下设置:classA{/***Thisissomedocumentation*/publicfunctionfoo(){}}classBextendsA{/***ThisdocumentationiswaymorespecificthaninclassA*/publicfunctionfoo(){}}当我尝试使用phpDocumentor2对此进行记录时,它在类B的方法foo()中显示“这是一些文档”,但我希望它说“该文档比类A中的文档更具体”。在phpDocumenter1中,一切看起来都像预期的那样。那么,这是怎么回事?这是phpDocumentor2的新默认行为
我有以下两个类。BMW类扩展了Car类。classCar{public$doors;public$wheels;public$color;public$size;publicfunctionprint_this(){print_r($this);}}classBMWextendsCar{public$company;public$modal;publicfunction__construct(){print_r(parent::print_this());}}$bmw=newBMW();$bmw->print_this();在上面的代码中,当我使用parent::print_this(
我有一个名为Report的类。我有几个类继承自报告、ClientReport、ClientVisitReport...classReport{...publicfunctionload($id){...}}classClientReportextendsReport{...publicfunctionload($id){parent::load($id);...}}classClientVisitReportextendsReport{...publicfunctionload($id){parent::load($id);...}}我希望能够从我提供给加载方法的id中调用正确的构造函
在我的团队目前正在进行的项目中,我们正在修改一个商业PHP应用程序。该应用程序中散布着父类检查并使用父类中不存在的属性的代码,如下所示:classA{functiondoSomething(){if(property_exists($this,'some_property')){$this->some_property=$_REQUEST['val'];}}}classBextendsA{protected$some_property;functiondoSomething(){parent::doSomething();}}我们觉得不得不修改这段代码有点脏;这是正确的设计吗?有什么方
我很久以前就读到过这个,但现在从未尝试过,我不记得这是否可能。是否可以在php5上扩展两个parent的类(class),例如class_d扩展了class_c和class_b此外,如果class_c和class_b本身是从class_a扩展的,你能做到这一点吗......所以你会得到这样的东西class_aclass_bclass_cclass_d 最佳答案 PHP不支持多重继承(您正在寻找的)。您可能想查看composition(其中一个类包含父类的实例)甚至interfaces如果它特别适用于您的情况。
我该怎么做?classtest{publicstaticfunctionrun(){echo"Numberis:".$num;}}classtestchildextendstest{protectedstatic$num=5;publicstaticfunctionexec(){$num=5;parent::run();}}testchild::exec();表示undefinedvariable“num”。http://ideone.com/WM7tHk如何访问这个变量? 最佳答案 你不应该这样做,因为你要求parent访问它可能
我正在创建一个网站,但为了进一步提高我的编码技能,我正在尝试利用OOP的力量来完成它。我正在使用类来验证表单输入,所以我想我会有一个“父”验证类,然后是每个提交的表单的子类(即登录类、注册类等),它们会负责将将正确的值存入数据库等。我看到的代码中,父对象是从子对象的构造函数中构造出来的。但是,我还没有这样做,但我的类(class)似乎仍然有效?有人能给我解释一下为什么我们要从子进程调用父构造函数吗?另外,我的代码是否只是因为我的parent有“公共(public)”功能(方法)才起作用?(这可能是一个问题)吗?我的代码(为清晰起见的删节版)如下:classValidation_Clas
使用PHP,一个类如何确定一个子类是否覆盖了它的方法?给定以下两个类:classSuperclass{protectedfunctiondoFoo($data){//empty}protectedfunctiondoBar($data){//empty}}classSubclassextendsSuperclass{protectedfunctiondoFoo($data){//dosomething}}如何将一个方法添加到父类(superclass)中,以根据其哪些方法被覆盖执行不同的操作?例如:if([doFooisoverridden]){//Performanactionwit
我经常在我的类中使用存储选项数组的属性。我希望能够以某种方式合并父类中声明的默认值中的那些选项。我用一些代码进行了演示。classA{public$options=array('display'=>false,'name'=>'John');}classBextendsA{public$options=array('name'=>'Mathew');}现在,当我创建B时,我希望$options包含来自A::options的合并数组现在发生的是这个。$b=newB();print_r($b);array('name'=>'Mathew');我想要使用array_merge_recursi