从抽象类扩展时删除方法?

时间:2016-04-04 23:50:37

标签: php oop

我正在阅读有关php https://www.binpress.com/tutorial/the-factory-design-pattern-explained-by-example/142中工厂方法的博客文章。基于此,我有:

abstract class Toy {
   public $name  = '';
   public $price  = 0;

   public function prepare() {
       echo $this->name. ' is prepared';
   }

   public function package() {
       echo $this->name. ' is packaged';
   }

   public function label(){
       echo $this->name . ' is priced at '.$this->price;
   }
}


class NY_Car extends Toy {
    public $name  = 'Car';
    public $price = 20;

在我们的文章中:

  

事实证明,NyToysFactory类已被远程分支的开发人员修改,因为工作人员不想进行打包和标签工作。他们通过删除label()和package()函数修改了produceToy()。

这给我留下了一个问题:如果你要构建一个类NY_Car扩展Toy,你怎么能删除方法prepare()和package()?

1 个答案:

答案 0 :(得分:1)

blockquote表示开发人员修改了远程分支......或者换句话说,他们通过manaully删除了这些方法。 Afaik,任何语言都无法通过扩展类来删除方法。但是,您可以通过将这些方法声明为“private”来使子类(扩展父类的类)无法访问父类中的方法。例如:

private function package() {
    echo $this->name. ' is packaged';
}