Stworzyłem tę klasęDostęp do pewnej klasy musi być błąd publicznego w PHP
<?php
abstract class Validator{
public $_errors = array();
abstract public function isValid($input);
public function _addErrors($message){
$this->_errors = $message;
}
public function getErrors(){
return $this->_errors;
}
public function getMessage(){
return $this->message;
}
}
class Validator_NoSpaces extends Validator{
public function __construct($value){
$this->isValid($value);
}
public function isValid($value){
if (preg_match('/\s/', $value)){
$this->_addErrors("Spaces are not allowed");
return false;
}
return true;
}
}
class Validator_MinimumLength extends Validator{
protected $_minLength;
protected $value;
public function __construct($value ,$minLength=8){
$this->_minLength = $minLength;
$this->value = $value;
$this->isValid($value);
}
public function isValid($input){
if (strlen($input) > $this->_minLength) {
return true;
}else{
$this->_addErrors("Input must be at least {$this_minLength}");
return false;
}
}
}
class Form_Element_Validators extends Validator{
protected $_validators = array();
public function addValidator(Validator $validator)
{
$this->_validators[] = $validator;
}
public function getValidators()
{
return $this->_validators;
}
protected function _addErrors(array $errors)
{
foreach ($errors as $error) {
$this->_addErrors($error);
}
}
public function hasErrors()
{
return (count($this->getErrors()) !== 0);
}
public function isValid($input)
{
foreach ($this->_validators as $validator) {
if (!$validator->isValid($input)) {
$this->_addErrors($validator->getErrors());
}
}
return !$this->hasErrors();
}
}
class Form_Element extends Form_Element_Validators{
public function __construct($value){
$this->addValidator(new Validator_NoSpaces($value));
$this->addValidator(new Validator_MinimumLength($value));
}
}
dla celów walidacji, ale trzymane daje mi ten błąd
Fatal error: Access level to Form_Element_Validators::_addErrors() must be public (as in class Validator) in C:\xampp\htdocs\beatbeast\includes\Db\Validators.php on line 91
ale zmienną instancji w tej klasie $ _errors jest ogłoszone publicznie, nie rozumiem dlaczego otrzymuję ten błąd.
Już zmieniłem jego typ dostępu na publiczny, ale dał mi kolejny błąd: "Ścisłe standardy: Deklaracja Form_Element_Validators :: _ addErrors() powinny być kompatybilne z Validator :: _ addErrors() w C: \ xampp \ htdocs \ beatbeast \ obejmuje \ Db \ Validator.php on line 91" – user962206
@user: to dlatego, że twoja definicja Sk? ad Abastract ma 'message' jako argument, a następnie w swojej klasie' Form_Element_Validator' masz rodzaj zrozumienia, że argumentem jest 'array' usuń podpowiedź typu "tablica" z metody potomnej lub dodaj ją do rodzica. – prodigitalson