Uncaught Error: Cannot access protected property
This error occurs when the property in a class is defined as protected, but accessed outside the class.
For example take the following program, where we have a class Person
with protected property $fullname
. protected means the visibility of this property is only within the class. If we try to access this property outside the class, then this fatal error is thrown.
PHP Program
<?php class Person { protected string $fullname; protected int $age; public function __construct(string $fullname = null, int $age = null) { $this->fullname = $fullname; $this->age = $age; } public function printDetails() { echo "Name : " . $this->fullname . "<br>Age : " . $this->age; } } //create object of type Person with arguments passed for constructor $person1 = new Person("Mike Turner", 24); //try to access protected property of class echo $person1->fullname; ?>
Output – xampp/logs/php_error_log
[28-Feb-2023 15:33:53 Europe/Berlin] PHP Fatal error: Uncaught Error: Cannot access protected property Person::$fullname in /Applications/XAMPP/xamppfiles/htdocs/tutorialkart.php:20 Stack trace: #0 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/tutorialkart.php on line 20
Solution
If we would like to get the value of a property, we can define a getter method in the class to return the value of this property, or else define the property as public.
Solution 1 – Define a getter method to access the property
We shall define a getter method getFullname()
in the Person
class that returns the value of the property $fullname
.
PHP Program
<?php class Person { protected string $fullname; protected int $age; public function __construct(string $fullname = null, int $age = null) { $this->fullname = $fullname; $this->age = $age; } public function getFullname() { return $this->fullname; } public function printDetails() { echo "Name : " . $this->fullname . "<br>Age : " . $this->age; } } //create object of type Person with arguments passed for constructor $person1 = new Person("Abc Defg", 24); //try to access protected property of class echo $person1->getFullname(); ?>
Output

Solution 2 – Make the property public
If we can make the property $fullname
as public, then we can access the property outside the class as well.
PHP Program
<?php class Person { public string $fullname; protected int $age; public function __construct(string $fullname = null, int $age = null) { $this->fullname = $fullname; $this->age = $age; } public function printDetails() { echo "Name : " . $this->fullname . "<br>Age : " . $this->age; } } //create object of type Person with arguments passed for constructor $person1 = new Person("Abc Defg", 24); //try to access protected property of class echo $person1->fullname; ?>
Output

Conclusion
In this PHP Tutorial, we learned how to solve a PHP fatal error Uncaught Error: Cannot access protected property with two possible solutions.