Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用self::而不是$this_Php_Static_Static Methods - Fatal编程技术网

Php 使用self::而不是$this

Php 使用self::而不是$this,php,static,static-methods,Php,Static,Static Methods,我遇到了一些php代码,我认为编写它的开发人员有点自相矛盾。 下面是他写的代码: if ($this->SQL !== null && $this->SQLState === self::STATE_CLEAN) return $this->SQL; 其中SQLState和STATE_CLEAN的定义如下: class someClass { const STATE_CLEAN = 1; private $SQLState =

我遇到了一些php代码,我认为编写它的开发人员有点自相矛盾。 下面是他写的代码:

if ($this->SQL !== null && $this->SQLState === self::STATE_CLEAN)
        return $this->SQL;
其中SQLState和STATE_CLEAN的定义如下:

class someClass {
    const STATE_CLEAN = 1;
    private $SQLState = self::STATE_CLEAN;
}
所以你可以看到,对于某些类属性,他使用$this,对于某些类属性,他使用self::我不明白为什么。 有人能帮忙吗。谢谢这里:

private $SQLState = self::STATE_CLEAN;
属性初始化为常量的值

在某些情况下,属性可能会改变,但常量是常量。因此,检查这种情况:

$this->SQLState === self::STATE_CLEAN
验证当前状态是否与初始状态相同是有意义的


为了澄清,因为我认为我错过了问题的要点,使用了
self::STATE_CLEAN
,因为
STATE_CLEAN
是一个问题。使用
$this->STATE\u CLEAN
可以让您

注意:未定义的属性:someClass::$STATE\u CLEAN

在这里:

属性初始化为常量的值

在某些情况下,属性可能会改变,但常量是常量。因此,检查这种情况:

$this->SQLState === self::STATE_CLEAN
验证当前状态是否与初始状态相同是有意义的


为了澄清,因为我认为我错过了问题的要点,使用了
self::STATE_CLEAN
,因为
STATE_CLEAN
是一个问题。使用
$this->STATE\u CLEAN
可以让您

注意:未定义的属性:someClass::$STATE\u CLEAN

良好做法是:

使用
self::
对于类常量
(引用类时-您可能没有此类的初始化对象实例)

和类变量的
$this->
(当引用初始化的对象实例时)

好的做法是:

使用
self::
对于类常量
(引用类时-您可能没有此类的初始化对象实例)


和类变量的
$this->
(在引用初始化对象实例时)

不可能的可能重复,因为我知道它们都是什么意思,我只是不理解这个具体情况。我想我不理解你的问题。你能解释一下吗?他故意使用self::和$this,而他可以使用$this,实际上他不应该使用任何一个定义的属性是静态的?所以我认为要么他和他的代码不一致,要么他知道一些我不知道的事情,可能是不可能的重复,因为我知道他们都是什么意思,我只是不理解这个具体的案例。我想我不理解你的问题。你能解释一下吗?他故意使用self::和$this,而他可以使用$this,实际上他不应该使用任何一个定义的属性是静态的?因此,我认为要么他与代码不一致,要么他知道一些我不知道的事情,为什么不使用$this->STATE\u CLEAN而不是self::STATE_CLEAN@Dever在哪一部分中,他应该使用
$this->STATE_CLEAN
而不是
self::STATE_CLEAN
?实际上两者都不是静态的,为什么要使用self:@Dever
STATE\u CLEAN
是一个常量,您不能使用
$this
访问它,为什么不使用$this->STATE\u CLEAN而不是self::STATE_CLEAN@Dever在哪一部分中,他应该使用
$this->STATE_CLEAN
而不是
self::STATE_CLEAN
?实际上两者都不是静态的,为什么使用self:@Dever
STATE_CLEAN
是一个常量,您不能使用
$this