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);
?>