Access control modifiers can place before a class, a method definition, or a property to alter the way PHP treats them.
Access Modifiers | Meaning |
---|---|
Public | Set property or method to be accessible from anywhere |
Private | Set property or method to be accessible only by its own class or object |
Protected | Set property or method to be accessible by its class or by its descendants |
Final | Set property, method, or class cannot be overridden in subclasses |
Abstract | Set method or class cannot be used directly. We have to subclass it. |
Most of the variables in a class should be marked as either protected or private.
Public properties and methods are accessible from anywhere.
<?PHP/*w w w .j av a 2 s . co m*/
class Book {
public $Name;
public function say() {
print "PHP!\n";
}
}
class PythonBook extends Book {
public function say() {
print "Python!\n";
}
}
$aBook = new PythonBook;
$aBook->Name = "Python";
print $aBook->Name;
?>
By default, all class methods are public.
The code above generates the following result.
Private properties are accessible only inside its own the class.
<?PHP
class Book {
private $Name;
private $NameTag;
public function setName($NewName) {
// etc
}
}
?>
Child classes cannot access private parent methods and properties. If you want to do this, you need the protected keyword instead.
Protected properties and methods are accessible within its owns class and a child class. Consider the following code:
<?PHP//from w w w.j a v a 2 s . co m
class Book {
public $Name;
protected function getName() {
return $this->Name;
}
}
class Poodle extends Book {
public function say() {
print "'Book', says " . $this->getName();
}
}
$aBook = new Poodle;
$aBook->Name = "PHP";
$aBook->say();
?>
The code above generates the following result.
The following code shows how to use Private member to hide information.
//from w w w. ja va 2s . c o m
<?php
class Widget
{
private $name;
private $price;
private $id;
public function __construct($name, $price)
{
$this->name = $name;
$this->price = floatval($price);
$this->id = uniqid();
}
//checks if two widgets are the same
public function equals($widget)
{
return(($this->name == $widget->name) AND
($this->price == $widget->price));
}
}
$w1 = new Widget('Cog', 5.00);
$w2 = new Widget('Cog', 5.00);
$w3 = new Widget('Gear', 7.00);
//TRUE
if($w1->equals($w2))
{
print("w1 and w2 are the same<br>\n");
}
//FALSE
if($w1->equals($w3))
{
print("w1 and w3 are the same<br>\n");
}
//FALSE, == includes id in comparison
if($w1 == $w2)
{
print("w1 and w2 are the same<br>\n");
}
?>
The code above generates the following result.