-1

我无法访问我的课程属性之一!这是代码:

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

我怎样才能访问这个数组???

4

1 回答 1

1

你的功能validateText()是一个static功能;因此,它不属于类的单个“实例”,Validation而是属于所有这些,因此不适用于$this关键字。

您在这里的选择是static从函数声明中删除或将其设为$errorMsg静态(根据它的定义,这可能是一个不错的选择):

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

static function validateText($value) {

    if (!empty($value)) {
        if (ctype_alpha($value)) {
            return false;
        } else { 
            return Validation::$errorMsg[1001]; //getting error here
        }
    } else {
        return Validation::$errorMsg[1001];//getting error here
    }
}

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

class Validation {
    const SOME_ERROR = 'Some Error';
    const SOME_OTHER_ERROR = 'Some other error';

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

您还可以通过以下方式从Validation类外部访问这些常量:Validation::SOME_ERROR并且,如果您有 PHP 5.3+,则可以使用:

$v = new Validation();
echo $v::SOME_ERROR;
于 2013-10-21T15:12:15.133 回答