public - общедоступный, обращаться можно из любого места сценария, как изнутри, так и извне класса
private - закрытый, доступен только в том классе, в котором создан. в классе-потомке недоступен - выдаст Fatal Error
protected - защищенный, доступ возможен только изнутри класса или его классов-потомков
Пример работы защищенного метода protected
<?php
class MyClass {
protected function Vychislenye($a,$b){
echo "Сумма чисел ".$a." и ".$b." равна ".$Summa=$a+$b."<br/>";
}
}
class MyClassExtends extends MyClass {
function Vychislenye($a,$b) {
echo "Переопределили напрямую метод Vychislenye(\$a,\$b) родительского класса как public<br/>";
parent::Vychislenye($a, $b);
}
public function FromChildClass($a,$b) {
echo "Переназначили метод Vychislenye(\$a,\$b) родительского класса как public с помощью parent<br/>";
parent::Vychislenye($a, $b);
}
}
$obj = new MyClass;
$objnew = new MyClassExtends;
echo $objnew->Vychislenye(2,4);
echo $objnew->FromChildClass(2,4);
echo $obj->Vychislenye(2,4); //Напрямую к protected из кода обратиться нельзя, получаем: Fatal error: Call to protected method MyClass::Vychislenye()
?>
сли метод или свойство объявлены статическими (static) - можно обращаться к ним без создания экземпляра класса. Предоставляется имя класса, дополняется оператором области видимости :: и указывается статический метод.
Значение статических переменных сохраняется на протяжении всего времени жизни сценария.
<?php
class MyClass {
public $prop = "Это свойство родительского класса.<br/>";
public static $count = 0;
public static function plusOne(){
return "Значение счетчика: ".++self::$count."<br/>";
}
}
do {
//Вывзвать plusOne() без создания экземпляра класса
echo MyClass::plusOne();
}
while (MyClass::$count<10);
?>