我正在尝试编写一个PHP类,在其中我将一些方法的可见性从protected更改为public。我相信我记得你可以在C ++中做到这一点,但我做了一些搜索,我没有在PHP中提出任何相关内容。有谁知道这在PHP中是否可行?
例如,假设这个类:
class ABC {
protected function foo() {
// Do something
}
}
class DEG extends ABC {
// can I make foo public now?
}
答案 0 :(得分:13)
您可以在从这样的基类派生时更改成员的可见性:
class Base
{
protected function foo() {}
}
class Derived extends Base
{
public function foo() { return parent::foo(); }
}
您也可以对属性执行相同操作(将protected
属性重新定义为public
)。
但是,请注意,如果基本属性为private
,那么您实际上不会增加其可访问性,而是声明具有相同名称的新属性。这不是函数的问题,就像您尝试调用private
基本方法一样,您会立即收到运行时错误。
答案 1 :(得分:4)
答案 2 :(得分:-1)
是的,可以做到。引自PHP manual ..
可以通过为前缀添加前缀来定义属性或方法的可见性 声明与关键字public,protected或private。类 公开的成员可以随处访问。成员宣布 protected只能在类本身内部访问 继承和父类。被宣布为私人的成员可能只是 由定义成员的类访问。
以及那里的例子......
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
修改:是的,您可以更改公共成员和受保护成员的可见性。 PHP手册中的另一个例子..
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined
?>