私の貧しいクラスを考えてみましょう:
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 '' ...
質問: クロージャにクラス コンテキストを「継承」させる方法はありますか?