我来自一些PHP代码,我认为编写它的开发人员有点矛盾。 所以这是他写的代码:
# Original data
data_count <- read.table(textConnection("
A B C D
1 2 3 4
5 6 5 4
3 2 1 2
3 4 5 6
5 4 3 2"
), header = TRUE)
# Keep track of counts
counts <- data.frame(
values = 1:6,
counts = 0
)
# Loop through data frame
for (i in 1:(nrow(data_count) - 1)) {
# Get two rows
data_dynamic <- data_count[i:(i + 1), ]
# Calculate difference and get boolean check
bool_check <- data_dynamic[1, ] == data_dynamic[2, ]
# Get values that are the same in consecutive row
counted_consecutive <- data_dynamic[1, bool_check]
# Check if you got any true values
if (sum(bool_check) == 0) {
next
} else {
increment <- counts[counted_consecutive, "counts"] + 1
counts[counted_consecutive, "counts"] <- increment
}
}
counts
#> values counts
#> 1 1 0
#> 2 2 0
#> 3 3 1
#> 4 4 2
#> 5 5 0
#> 6 6 0
其中SQLState和STATE_CLEAN的定义如下:
if ($this->SQL !== null && $this->SQLState === self::STATE_CLEAN)
return $this->SQL;
所以你可以看到,对于某些类属性,他使用$ this,对于某些人,他使用self ::我无法理解为什么。 可以任何人帮助。感谢
答案 0 :(得分:3)
下面:
private $SQLState = self::STATE_CLEAN;
该属性初始化为常量的值。
在某些时候,属性可能会改变,但常量是常量。所以检查这个条件:
$this->SQLState === self::STATE_CLEAN
有必要验证当前状态是否与初始状态相同。
为了澄清,因为我认为我错过了问题的要点,因此使用了self::STATE_CLEAN
,因为STATE_CLEAN
是class constant。使用$this->STATE_CLEAN
会让你
注意:未定义的属性:someClass :: $ STATE_CLEAN
答案 1 :(得分:1)
良好的做法是:
使用
self::
用于类常量
(当引用类时 - 您可能没有此类的初始化对象实例)
和$this->
用于类变量
(当引用初始化对象实例时)