Неустранимая ошибка PHP: вызов защищенного метода FormValidator :: setError () из контекста '' - PullRequest
0 голосов
/ 26 января 2011

рассмотрите мой бедный класс:

abstract class FormValidator
{
    private $error_objects = array();

    protected function setError($entry_name,$err_msg)
    {
        $this->error_objects[] = 
            new FormValidatorErrorObject($entry_name,$err_msg);
    }

    protected function setErrorCurry($entry_name)
    {
        $_this = $this;
        return function($err_msg) use($entry_name,$_this)
        {
            return $_this->setError($entry_name,$err_msg);
        };
    }

    public function countErrors()
    {
        return count($this->error_objects);
    }

    public function getError($index)
    {
        return $this->error_objects[$index];
    }

    public function getAllErrors()
    {
        return $this->error_objects;
    }

    abstract function validate();
}

Я использую его в классе реализации следующим образом:

$setError = $this->setErrorCurry('u_email');
    if(empty($uemail))
    {
        $setError(uregform_errmsg_email_null);
    }

    if(!filter_var($uemail,FILTER_VALIDATE_EMAIL))
    {
        $setError(uregform_errmsg_email_invalid);
    }

, что приводит к следующей ошибке:

Fatal error: Call to protected method FormValidator::setError() from context '' ...

Вопрос: есть ли способ заставить замыкание «наследовать» контекст класса?

1 Ответ

0 голосов
/ 26 января 2011

Видимо не изначально. В этом примечании к руководству предлагается довольно громоздкий способ использования отражения и класса-обертки для обеспечения закрытой и защищенной функциональности доступа.

...