PHP常量成员变量

PHP常量成员变量,php,oop,Php,Oop,我正在寻找一种方法来声明一个一旦初始化就无法更改的成员变量(它可以设置一次,但永远不会重置) 我找的不是类常量,而是每个实例的成员变量。在PHP中是否有这样做的方法?您可以使用关键字:- final $variable 您可以使用关键字:- final $variable 解决方案可以是: class SuperClass { private $_something; public final SetSomething(SomethingCls $something) {

我正在寻找一种方法来声明一个一旦初始化就无法更改的成员变量(它可以设置一次,但永远不会重置)

我找的不是类常量,而是每个实例的成员变量。在PHP中是否有这样做的方法?

您可以使用关键字:-

final $variable
您可以使用关键字:-

final $variable
解决方案可以是:

class SuperClass {

    private $_something;

    public final SetSomething(SomethingCls $something) {
        if ($this->_something != NULL) {
            throw new \Exception();
        }

        $this->_something = $something;
    }

    public final GetSomething() {
        return $this->_something;
    }

}
事实上,没有任何PHP构造可以实现这一点,因此您必须编写自己的实现来解决特定的问题。如果不进行一些检查和/或通过继承进行保护,就无法保护变量不被覆盖。

解决方案可以是:

class SuperClass {

    private $_something;

    public final SetSomething(SomethingCls $something) {
        if ($this->_something != NULL) {
            throw new \Exception();
        }

        $this->_something = $something;
    }

    public final GetSomething() {
        return $this->_something;
    }

}

事实上,没有任何PHP构造可以实现这一点,因此您必须编写自己的实现来解决特定的问题。如果不进行一些检查和/或通过继承进行保护,就无法保护变量不被覆盖。

到目前为止,您做了什么?还是你想让我们帮你做工作?@JakeGould:什么工作?这听起来不像是一个家庭作业问题——好吧,至少对我来说是这样。他们已经做了什么&原始海报试图做什么?如果没有这些,那么原始海报期望任何人说什么或做什么?创建一个私有类变量,在构造函数中赋值,不要在类的任何地方更改它,也不要为它创建任何mutator(set)函数。@Zllalani我现在或多或少地按照您的建议使用它。但它感觉不到强健。我正在寻找一个PHP构造来限制变量的多次更改,但是我想如果它不存在,那么我就不走运了。到目前为止你做了什么?还是你想让我们帮你做工作?@JakeGould:什么工作?这听起来不像是一个家庭作业问题——好吧,至少对我来说是这样。他们已经做了什么&原始海报试图做什么?如果没有这些,那么原始海报期望任何人说什么或做什么?创建一个私有类变量,在构造函数中赋值,不要在类的任何地方更改它,也不要为它创建任何mutator(set)函数。@Zllalani我现在或多或少地按照您的建议使用它。但它感觉不到强健。我正在寻找一个PHP构造来限制变量多次更改,但我想如果它不存在,那么我就不走运了。你是在问问题还是在提供答案?这应该是一个评论。如果我只是发表评论,我会把它放在评论栏。你的措辞让它看起来像一个问题。不,但“为什么你不能”意味着一个问题。在英语中,没有一个句子是以这些词开头的。而“您可以做”将是一个答案。注意:属性不能声明为final,只有类和方法可以声明为final。您是在提问还是提供答案?这应该是一个评论。如果我只是发表评论,我会把它放在评论栏。你的措辞让它看起来像一个问题。不,但“为什么你不能”意味着一个问题。在英语中,没有一个句子是以这些词开头的。注意:属性不能声明为final,只有类和方法可以声明为final。