【问题标题】:Checking if property is set in class检查属性是否在类中设置
【发布时间】:2014-05-05 16:20:16
【问题描述】:

如果类构造函数设置了该类的属性,是否仍建议检查该属性是否在其他方法中设置?代码:

class A {

    public $property;

    public function __construct($value) {
        $this->property = $value;
    }

    public function doSomething() {

        if(isset($this->property)) {
            //actual code here
            //...but is this isset-check necessary?
        }
        else { return false; }
    }
} 

我只是习惯于检查是否设置了变量,只是想知道是否有任何顾虑将其排除在外。谢谢!

【问题讨论】:

标签: php


【解决方案1】:

这取决于你想要达到的目标。

如果属性也是null,则在您的特定情况下isset($this->property) 将是true。如果这就是你想要的 - 最好检查它是否是 null 明确

if ($this->property === null)

如果这不是您想要的,而您只是想确保该属性存在,那么它就是多余的,因为:

  1. 一旦属性被声明 - 它就会在那里
  2. 如果您担心 unset 属性的某些代码,因为它是公开的(无论如何这都是个坏主意) - 然后将其设置为 privateprotected 并且不要公开对它的直接访问,但是改为提供吸气剂

【讨论】:

  • 感谢您的回答。一开始将财产私有化似乎是一个好主意。如果 $property 不包含某种格式的值(仅填充整数的单维或多维数组),我想要的只是停止运行的代码。这些检查在我真实代码的构造函数中。如果构造函数返回false,则类无法初始化,对吗?因此,如果我是正确的,那么在这种情况下,其他方法无论如何都无法执行任何操作。那是我的问题。 ;)
  • "如果构造函数返回false,类不能初始化,对吧?" - - 不正确。构造函数不能返回任何值。停止初始化对象状态的唯一方法是从构造函数中抛出异常。
  • 如果你有一段时间不编码,就会发生这种情况! ;) 我认为使用 setter 函数可能比将所有逻辑都放在构造函数中要好得多。但是,就我而言,$property 中的数据对于类的运行是绝对必要的(每个方法都使用 $property)。正如this page 所说,可以争论在构造函数中设置$property。我只是不喜欢我的代码中所有那些 throw/try/catch 的东西,所以使用 setter 会更好吗?
  • @joepd:这取决于。构造函数保证运行,setter - 不是。如果您的对象可以在未完全初始化的情况下存活(某人(非)故意没有调用 setter),那么这就是一个解决方案。不过我不会那样做。
  • 我不知道旧的 2014 php,但是当 $property 为空时 isset($this->property) 返回 false。我错过了什么吗?在这里,当我感到困惑时,我总是使用这张桌子。很有帮助:virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 2011-08-22
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
相关资源
最近更新 更多