如何只延伸一个父母?

时间:2012-10-25 08:22:28

标签: php oop

假设我有2个班级

class BaseClass {
   ...
}

class SomeClass extends BaseClass {

}

现在我想创建第三个类,它只会扩展SomeClass,但不会从BaseClass中获取任何内容。这甚至可能吗?

我正在使用webdriver编写Selenium测试,并希望从数据库或Web服务检查Selenium的数据,但不想加载整个框架,只是我们的一些库

3 个答案:

答案 0 :(得分:6)

你做不到。这不是继承的工作方式。从SomeClass继承的类将始终继承其所有属性和方法,包括从BaseClass继承的SomeClass的属性和方法。您可以通过可见性来限制对它们的访问,但仅限于从受保护的私有到公共,而不是相反,例如,你可以放松能见度,但不能收紧它。

请参阅PHP手册中有关继承和可见性的章节:


另一种选择是在SomeClass实例周围使用某种Facade来控制对SomeClass中可访问的属性和方法的访问,例如:假设你的SomeClass有一个方法foo()并从BaseClass继承bar(),你可以做

class LimitedAccess
{
     private $instance;

     public function __construct(SomeClass $someClass)
     {
          $this->instance = $someClass
     }

     public function foo()
     {
         return $this->instance->foo;
     }
}

然后您可以通过此Facade汇集所有访问权限,从而有效地阻止对BaseClass :: bar()的访问。请注意,这不会以任何方式更改继承层次结构。它只是控制访问。

答案 1 :(得分:2)

想想人类...... 你有妈妈,她有妈妈...... 你不能成为你母亲的儿子,而不是你祖母的孙子。

同样是在PHP

当班级向其他人伸出他的孩子时......

答案 2 :(得分:0)

如果您在PROTECTED中的BaseClass方法中设置了Third访问修饰符,您希望限制从{{1}}类调用,那么您肯定可以这样做。