PHP - 覆盖属性

时间:2011-11-23 23:30:32

标签: php properties override

有没有办法防止PHP中的覆盖属性?如果是的话 - 怎么样?

4 个答案:

答案 0 :(得分:4)

我认为这就是你想要的:

class A{
    private $a;
    public function __construct(){
        $this->a = 'A';
    }
    public function __get($property){
        return $this->{$property};
    }
}

class B Extends A{
    public function getA(){
        return $this->a;
    }
    public function __get($property){
        return parent::__get($property);
    }
}

$b = new B;
echo $b->getA();

答案 1 :(得分:1)

做这种事情的唯一方法是在课堂上玩__set()__set仅用于不可访问的属性。

对于公共财产,我认为没有办法阻止覆盖。

您应该查看官方文档:http://fr2.php.net/manual/en/language.oop5.overloading.php

答案 2 :(得分:1)

class TheBaseClass {

  private $nomod = 'foo';

  public function getNoMod() {
     return $this->nomod;
  }
}

class TheChildClass extends TheParentClass {
   public function funcUsesNomod(){
      return 'The value of nomod is '. $this->getNomod();
   }
}

答案 3 :(得分:0)

“是的”,如果你让它们成为常数。请参阅How to implement a read-only member variable in PHP?的答案,不要跳过评论。

示例:

class user {
  const ALWAYS_ONE = 1;
}

我想,将属性声明为private也可以防止重载但是降序类也无法访问它们。