如何只延伸一个父母?

Tom*_*cik 2 php oop

假设我有两节课

class BaseClass {
   ...
}

class SomeClass extends BaseClass {

}
Run Code Online (Sandbox Code Playgroud)

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

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

Gor*_*don 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;
     }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以通过这个Facade漏斗所有访问,有效地防止访问BaseClass :: bar().请注意,这不会以任何方式更改继承层次结构.它只是控制访问.