PHP-重写属性
有没有办法防止在PHP中重写属性?如果是的话-怎么做?做这件事的唯一方法就是在类中使用PHP-重写属性,php,properties,overriding,Php,Properties,Overriding,有没有办法防止在PHP中重写属性?如果是的话-怎么做?做这件事的唯一方法就是在类中使用\uu set()。 但,集合仅用于不可访问的属性 对于公共属性,我认为没有任何方法可以防止重写 您应该查看官方文档:“是的”,如果您将它们设置为常量。查看的答案,不要跳过评论 例如: class user { const ALWAYS_ONE = 1; } 我想,将属性声明为private也可以防止重载,但降序类也无法访问它们。我想这就是您想要的: class TheBaseClass { pri
\uu set()
。
但,集合
仅用于不可访问的属性
对于公共属性,我认为没有任何方法可以防止重写
您应该查看官方文档:“是的”,如果您将它们设置为常量。查看的答案,不要跳过评论
例如:
class user {
const ALWAYS_ONE = 1;
}
我想,将属性声明为
private
也可以防止重载,但降序类也无法访问它们。我想这就是您想要的:
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();
}
}
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();
你是说像?我在类库中有一个名为pbase的受保护属性(例如),我想防止在子类中重写该属性。将其设置为私有?当我将其设置为私有时,我不能从子类调用它,但我只想防止重写。我想你需要一个方法来检索你的值,而不是普通属性。谢谢,但我需要在子类(它包含对象)中使用“属性接口”调用这个属性,我认为@Jared Farrish是对的,使用一个方法。(很难说你没有解释完整的场景)谢谢,但我知道设置的意思,也帮不了我,因为我的属性已经声明了。所以我认为你想做的是不可能的。。。试着找到另一种方法:将这些受保护的变量存储在私有数组中,并使用特定的_getSo访问它们。不管怎样,我取消了属性声明,然后…:)我是Jared Farrish,我同意这条消息。为了公平对待@dev null居住者,OP似乎建议一个方法不起作用(出于某种原因,它必须是一个属性)。不过,我已经给了你们两个投票。只有当你想要一个方法而不是一个属性,并且你控制子类定义时,这才有效。否:(.我不想将此属性称为属性:D谢谢。@user997379-您必须说明您需要如何实现它;简而言之,如果不使用方法,PHP中的功能听起来是不可能实现的。您是否可以发布一些代码,解释您希望在何处防止属性被重写,以及如何执行访问它们?@JaredFarrish comment给了我一个提示,如果您不想让父类像在基类中一样拥有自己的属性名称,那么现在是不可能的(对于属性,方法可以是
final
)。