PHP protected

Created with Sketch.

PHP protected

Summary: in this tutorial, you will learn how to use the PHP protected access modifier to allow child classes to access properties and methods of the parent class.

Introduction to the PHP protected access modifier

In the access modifier tutorial, you learned about the public and private access modifiers. The public properties and methods can be accessed from both inside and outside of the class while the private properties and methods can be accessed only within the class.

The protected properties and methods can be accessed from the inside of the class and any class that extends the class.

Like the private and public access modifier, you prefix the property name with the protected keyword to define a protected property:

protected $propertyName;

Code language: PHP (php)

As well as a method:

protected function methodName()
{

//...
}

Code language: PHP (php)

PHP protected property example

First, define the Customer class that has a private property $name:

<?php

class Customer
{
private $name;

public function __construct($name)
{
$this->name = $name;
}
}

Code language: HTML, XML (xml)

Second, define the VIP class that extends the Customer class. The VIP class has a method getFormattedName() that accesses the $name property:

<?php

class VIP extends Customer
{
public function getFormattedName()
{
return ucwords($this->name);
}
}

Code language: HTML, XML (xml)

Third, create an instance of the VIP class and call the getFormattedName() method:

<?php

$alex = new VIP('alex ferguson');
echo $alex->getFormattedName();

Code language: HTML, XML (xml)

PHP issued the following error:

PHP Notice: Undefined property: VIP::$name in ...

Code language: PHP (php)

Since $name property is private, you can only access it within the Customer class. To allow the child class to access the $name property, you can change it to a protected property like this:

<?php

class Customer
{
protected $name;

public function __construct($name)
{
$this->name = $name;
}
}

Code language: HTML, XML (xml)

If you execute the script again, you’ll see the following in the output:

Alex Ferguson

 

PHP protected method example

Let’s take an example of using the protected methods.

First, define the Customer class:

<?php

class Customer
{
protected $name;

public function __construct($name)
{
$this->name = $name;
}

protected function format()
{
return ucwords($this->name);
}

public function getName()
{
return $this->format($this->name);
}
}

Code language: HTML, XML (xml)

The Customer class has the protected property $name and protected method format(). The format() method returns the $name with the first character of each word converted to uppercase.

The Customer class also has the public method getName() that calls the format() method to return the formatted name.

Second, define the VIP class that extends the Customer class:


<?php

class VIP extends Customer
{
protected function format()
{
return strtoupper($this->name);
}
}

Code language: HTML, XML (xml)

The VIP class has the overriding format() method that returns the $name with all characters converted to uppercase. The format() method is also protected.

Third, create a new instance of the Customer class and display the name:

$bob = new Customer('bob allen');
echo $bob->getName(); // Bob Allen

Code language: PHP (php)

Output:

Bob Allen

 

In this example, the getName() method invokes the format() method of the Customer class and returns the name with the first character of each word converted to uppercase.

Finally, create a new instance of the VIP class and show the name:

$alex = new VIP('alex ferguson');
echo $alex->getName(); // ALEX FERGUSON

Code language: PHP (php)

Output:

ALEX FERGUSON

 

This time, the getName() method calls the format() of the VIP class instead of the Customer class. Therefore, you see the name is converted uppercase.

Summary

  • Use protected properties and methods can only be accessed within the class and in any child classes of the class.

Leave a Reply

Your email address will not be published. Required fields are marked *