Введение в PHP5 - Дескрипторы Private, Public и Protected

ОГЛАВЛЕНИЕ

 

Дескрипторы Private, Public и Protected

В PHP4 все методы и переменные внутри объекта были доступны извне, другими словами все методы и переменные всегда были открытыми. В PHP5 вводится три дескриптора для осуществления контроля над доступом к переменным и методам: Public, Protected и Private.

  • Public (открытый): Метод/переменная доступны из любого места в коде.
  • Private (закрытый): Закрытые методы или переменные доступны только внутри класса.
  • Protected (защищённый): Защищённые методы или переменные доступны только внутри класса, где они были объявлены и из его производных классов.

Пример 4: Public, protected and private

<?php
class foo {
  private 
$x;

  public function 
public_foo() {
    print(
"Это открытый метод");
  }

  protected function 
protected_foo() {
    
$this->private_foo(); //Всё правильно, мы можем вызывать закрытые методы, потому что мы находимся в том же классе
    
print("Это защищённый метод");
  }

  private function 
private_foo() {
    
$this->3;
    print(
"Это закрытый метод");
  }
}

class 
foo2 extends foo {
  public function 
display() {
    
$this->protected_foo();
    
$this->public_foo();
    
// $this->private_foo();  // Неправильно! В базовом классе метод закрыт
  
}
}

$x = new foo();
$x->public_foo();
//$x->protected_foo();  //Неправильно, защищённые методы могут вызываться только из того же класса или
//его производных классов
//$x->private_foo();    //Неправильно, закрытые методы могут быть вызваны только в классе, где они были объявлены 

$x2 = new foo2();
$x2->display();
?> 

Совет разработчикам: Переменные класса всегда следует делать закрытыми, прямой доступ к переменным - не очень хорошая практика в ООП, лучше всего для доступа/изменения переменных класса определять специальные методы.