Introduction
Visibility of class properties and methods is an important aspect of object-oriented programming in php and frameworks like Laravel. The visibility determines how and where the class properties and methods can be accessed and modified in your application. In this comprehensive guide, we will discuss the different visibility modifiers available in Laravel, and how they affect the accessibility of class properties and methods.
- Public: Public is the default visibility modifier in Laravel. It means that the class property or method can be accessed from anywhere in the application, including outside the class. Public properties and methods can be modified from anywhere in the application, which makes them less secure than the other visibility modifiers.
- Protected: Protected properties and methods can only be accessed within the class and its subclasses. This means that they are not accessible outside the class, but can be accessed and modified by any subclass. The protected modifier is useful when you want to expose certain functionality to subclasses, but not to the rest of the application.
- Private: Private properties and methods are the most restrictive visibility modifier in Laravel. They can only be accessed and modified from within the class itself. Private properties and methods are not accessible from outside the class or its subclasses, which makes them the most secure way to protect sensitive information.
- Public Readonly: The
public readonly
modifier is available in PHP 8.0 and later. It is similar to thepublic
modifier, but with an added restriction: once a public readonly property has been set, it cannot be modified again. This is useful when you want to expose a property to other parts of the application, but don't want it to be modified once it has been set. - Protected Readonly: The
protected readonly
modifier is also available in PHP 8.0 and later. It is similar to theprotected
modifier, but with the added restriction that the property cannot be modified once it has been set. Protected readonly properties can be accessed within the class and its subclasses, but cannot be modified, which provides an extra level of security for sensitive information.
Practical Examples:
- Public:
class User {
public $name;
public function getName() {
return $this->name;
}
}
In the example above, the $name
property and getName()
method are both public, which means they can be accessed from outside the User
class.
- Protected:
class User {
protected $email;
protected function getEmail() {
return $this->email;
}
}
class Admin extends User {
public function getEmailForAdmin() {
return $this->getEmail();
}
}
In the example above, the $email
property and getEmail()
method are both protected, which means they can be accessed from within the User
class and its subclass Admin
.
- Private:
class User {
private $password;
private function getPassword() {
return $this->password;
}
}
In the example above, the $password
property and getPassword()
method are both private, which means they can only be accessed from within the User
class.
By default, if no visibility modifier is specified for a property or method, it will be considered public.
- Public Readonly:
class User {
public readonly $name;
public function __construct($name) {
$this->name = $name;
}
}
$user = new User('John');
echo $user->name; // 'John'
$user->name = 'Jane'; // Error: Cannot modify readonly property
In the example above, the $name
property is defined as public readonly
, which means it can be accessed from anywhere in the application, but cannot be modified once it has been set.
- Protected Readonly:
class User {
protected readonly $email;
public function __construct($email) {
$this->email = $email;
}
}
class Admin extends User {
public function getEmailForAdmin() {
return $this->email;
}
}
$admin = new Admin('admin@example.com');
echo $admin->getEmailForAdmin(); // 'admin@example.com'
$admin->email = 'newadmin@example.com'; // Error: Cannot modify readonly property
In the example above, the $email
property is defined as protected readonly
, which means it can be accessed from within the User
class and its subclass Admin
, but cannot be modified once it has been set.
Note that public readonly
and protected readonly
are only available in PHP 8.0 and later. If you're using an earlier version of PHP, you won't be able to use these modifiers.
Conclusion
In conclusion, the visibility modifiers available in Laravel allow you to control how and where your class properties and methods can be accessed and modified in your application. The public
, protected
, and private
modifiers provide varying levels of accessibility, while the public readonly
and protected readonly
modifiers provide an extra layer of security by restricting modification of the properties once they have been set. Understanding these visibility modifiers is essential for writing secure and maintainable code in Laravel.
Enjoy this article ? drop a comment below and add your own contribution.