如何访问属于数组的类属性?PHP

如何访问属于数组的类属性?PHP,php,oop,this,Php,Oop,This,我无法访问我的类属性之一!代码如下: Class Validation { public $errorMsg = array( 1000 => 'Some Error', 1001 => 'Some other error'); static function validateText($value) { if (!empty($value)) { if (ctype_alpha($value)) {

我无法访问我的类属性之一!代码如下:

Class Validation {

public $errorMsg = array( 1000 => 'Some Error',
                              1001 => 'Some other error');

static function validateText($value) {

if (!empty($value)) {
        if (ctype_alpha($value)) {
    return false;
     } else { 
            return $this->errorMsg[1001]; //getting error here
     }
    } else {
        return $this->errorMsg[1001];//getting error here
    }
}
我的日志告诉我:PHP致命错误:不在对象上下文中使用$this


如何访问此阵列

您的函数
validateText()
是一个
静态的
函数;因此,它不属于类
验证的单个“实例”,而是属于所有类,因此不适用于
$this
关键字

您在这里的选择是从函数声明中删除
static
,或者使
$errorMsg
本身成为static(根据其定义,这可能是一个很好的方法):

附加组件(常量与静态)
根据建议的意见,我还添加了“适当”的方式来处理您的确切情况。以上内容将修复您的错误,但是,这并不是将“错误消息”作为类属性处理的最佳方法。您可以使用关键字设置常量类成员列表,而不是使用
static
(该关键字不适用于数组,因此您将在此处创建多个变量):

您还可以通过:
Validation::SOME_ERROR
Validation
类外部访问这些常量,如果您有PHP5.3+,您可以使用:

$v = new Validation();
echo $v::SOME_ERROR;

这是一个静态函数,所以没有
$this
。读这篇文章哦,太愚蠢了!我甚至没有注意到我的函数是静态的。。。真蠢!在PHP中,如何使属性为静态是更好的解决方案?不要在课堂上谈论硬编码的错误信息。@Leri我对你的问题有点困惑;“如何使属性静态成为一个更好的解决方案”-这是一个在无数语言中使用的解决方案,PHP就是其中之一。这个错误消息数组就是一个很好的例子,说明了何时/如何在类中使用静态变量,因为它不会在实例之间更改(更不用说方法本身是静态的)。另一种不适用于数组的方法是定义一个
const
(或者在本例中,定义几个
const
变量)。然而,为了解决OP的实际问题,我坚持使用
静态
。其主要思想是,虽然这是解决方案和正确的解决方案,但并不比使用实例变量更好。因为这样,您可以有多个具有不同错误消息的验证器。如果希望在实例之间共享数据,可以将相同的数组传递给这些实例。另外,使用static,您可以在脚本中创建隐藏的依赖项。Thx获得了一个很好的答案:)我选择将errorMsg设置为static,因为我在许多情况下将此函数用作静态调用@卡迪纳你做错了。。。在某个时刻,你会意识到这一点
class Validation {
    const SOME_ERROR = 'Some Error';
    const SOME_OTHER_ERROR = 'Some other error';

    static function validateText($value) {
        // process value
        return Validation::SOME_ERROR;
    }
}
$v = new Validation();
echo $v::SOME_ERROR;