假设我有2个班级
class BaseClass {
...
}
class SomeClass extends BaseClass {
}
现在我想创建第三个类,它只会扩展SomeClass,但不会从BaseClass中获取任何内容。这甚至可能吗?
我正在使用webdriver编写Selenium测试,并希望从数据库或Web服务检查Selenium的数据,但不想加载整个框架,只是我们的一些库
答案 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}}类调用,那么您肯定可以这样做。