PHP Tutorial - PHP Class Access Control Modifiers






Access control modifiers can place before a class, a method definition, or a property to alter the way PHP treats them.

List of Access Control Modifiers

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
ProtectedSet 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

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

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

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.

Example

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.