Access Level to certain class must be public error in PHP

abstract, dry, php, public

Solution

Youre getting that error because the visibility of the method must be the same or less restrictive than that of it its definition on a parent class. In this case you have `addErrors` as `public` on your abstract class and are attempting to make it `protected` on a child class.

Problem

I created this class ``` <?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)); } } ``` for Validation purposes, but it kept giving me this error ``` 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 ``` But the instance variable in this class $_errors is declared public, I don't get it why I am receiving this error.

Original source