2

假设我有 2 节课

class BaseClass {
   ...
}

class SomeClass extends BaseClass {

}

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

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

4

3 回答 3

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() 的所有访问。请注意,这不会以任何方式更改继承层次结构。它只是控制访问。

于 2012-10-25T08:23:30.063 回答
2

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

同样是在 PHP

当 Class 扩展其他它的 AWAYS 时,他的孩子......

于 2012-10-25T08:34:29.950 回答
0

如果您在要限制为从类调用PROTECTED的方法上放置访问修饰符,则绝对可以这样做。BaseClassThird

于 2012-10-25T11:44:25.977 回答