假设我有两节课
class BaseClass {
...
}
class SomeClass extends BaseClass {
}
Run Code Online (Sandbox Code Playgroud)
现在我想创建第三个类,它只会扩展SomeClass,但不会从BaseClass中获取任何内容.这甚至可能吗?
我正在用webdriver编写Selenium测试,想要从Selenium检查数据库对数据库或Web服务,但不想加载整个框架,只是我们的一些库
你不能.这不是继承的工作方式.从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().请注意,这不会以任何方式更改继承层次结构.它只是控制访问.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |