Modyfikatory dostępu w klasach

0

Witam. Proszę o wyjaśnienie, poprawienie. Są 3 modyfikatory dostępu: public, private, protected.
Rozumiem, że private użyjemy tylko wewnątrz klasy $this->imie = 'test'; a poza nią czyli w jakimś tam innym pliku $klasa = new class; $klasa->imie = 'kurde'; już to nie zadziała, ale mając metodę getName w której użyję już zmiennej private $imie; to $klasa = new class; $klasa->getName to bedzie prawidłowo?
Wywołanie metody lub zmiennej - właściwości, opisanej jako protected nie użyję już poza klasą, jedynie w niej? Czyli $samochod = new car; $klasa->predkosc = '100'; nie zadziala jesli $predkosc w klasie bedzie oznaczone jako protected? Zadziała tylko użycie metody w ten sposób

protected function obliczPrzebieg() { return 200*424*55/62; }
public function przebiegAuta() { $prz = $this->obliczPrzebieg()*2; }

i do metody obliczPrzebieg nie odwołam się w sposób np. $kl = new car; $kl->obliczPrzebieg() ?

Z góry dziękuję.

2

taki przykład:

 
class A {
  private $private = 'priv';
  protected $proteced = 'prot';
  public $public = 'pub';
}
class B extends A {
  public function test_private() {
    return $this -> private; //błąd, bo klasa dziedzicząca nie ma dostępu do pól "private"
  }
  public function test_protected() {
    return $this -> protected; //działa, klasa dziedzicząca ma dostęp do pól "protected" 
  }
  public function test_public() {
    return $this -> public; //działa, klasa dziedzicząca ma dostęp do pól "public" 
  }
}
function test_private() {
  $a = new A();
  return $a -> private; //błąd, z zewnątrz nie ma dostępu do pól "private"
}
function test_protected() {
  $a = new A();
  return $a -> protected; //błąd, z zewnątrz nie ma dostępu do pól "protected"
}
function test_public() {
  $a = new A();
  return $a -> public; //działa, pola "public" są dostępne z zewnątrz. 
}

(powyższy kod akurat może nie działać, nie wiem czy można nazwać pole słowem kluczowym - raczej nie.)
generalnie do pól publicznych danej klasy dostęp jest z każdego miejsca, do chronionych ("protected") mają tylko metody zdefiniowane w danej klasie lub klasach dziedziczących, do prywatnych ("private") tylko metody zdefiniowane w danej klasie.

0

Wszystko rozbija sie o zasade hermetyzacji, czyli ukrywania kodyu przed osobami trzecimi. Zmienne sa private i maja swoje publiczne akcesory(gettery) i mutatory(settery). Wyobraz sobie ze pracujesz w teamie 20 programistow i zajmujesz sie jakas klasa, majac dostep do pol wystarczylo by zebys Ty lub kto inny zmienil wartosc w innej klasie i kod sie sypie. Majac do dyspozycji tylko publiczne metody, wnetrze klasy moze byc dowolnie modyfikowane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1