PROGRAMOWANIE OBIEKTOWE: public i private

Listopad 15 2019
PROGRAMOWANIE OBIEKTOWE: public i private

Dobra, dziś kolejna dawka programowania obiektowego. Bardzo prosta rzecz czyli czym się różni public function od private function. 

 

Do tej pory pisaliśmy wszędzie public function. To oznacza, jak nietrudno się domyślić że jest to funkcja publiczna, czyli dostępna zarówno ze środka klasy jak i z zewnątrz. Prosty przykład:

 

class User{

    public function hi() {

       return $this->say_a();

    }

    public function say_a(){

        return ‘aaaaa’;

    }

}

 

$osoba = new User;

$osoba->hi();

$osoba->say_a();

 

Zarówno funkcja hi jak i funkcja say_a zwróci to samo. W pierwszym przypadku przy wywołaniu $osoba->hi() funkcja hi odnosi się do publicznej funkcji say_a ( return $this->say_a() ) i zwraca jej wynik - wszystko gra. W drugim przypadku kiedy wywołujemy bezpośrednio $osoba->say_a() po prostu dostajemy return ‘aaaaa’ - identycznie.

Dobra to teraz zmieńmy jedną rzecz.

 

class User{

    public function hi() {

       return $this->say_a();

    }

    private function say_a(){

        return ‘aaaaa’;

    }

}



$osoba = new User;

$osoba->hi();

 

Co się teraz stanie? Wyświetli się nam ‘aaaaa’. Działa to tak samo, a nadanie private funkcji say_a w tym wypadku nic nie zmienia, bo funkcje które są private mogą być wywoływane z poziomu wnętrza klasy. Co się jednak stanie jak spróbujemy ją wywołać z zewnątrz? 



$osoba = new User;

$osoba->say_a();


Fatal fucking error :) Czyli public od private function różni się miejscem z którego daną funkcję możemy wywołać.

Public - z wnętrza i z zewnątrz klasy

private - tylko z wnętrza

Po co to nam? Np we frameworkach public function to z reguły metody kontrolerów (funkcje w klasie) odpowiadające za konkretną stronę do wyświetlenia. Czyli jak wchodze na adres https://geekfactory.pl/strona/blog to oznacza że istnieje klasa strona która ma w sobie funkcję publiczną blog - wyświetlającą listę blogów. Tak samo kiedy odwiedzam https://geekfactory.pl/strona/wpis/ to ta sama klasa strona, ale funkcja wpis odpowiada za wyświetlanie jednego wpisu i też jest publiczna bo każdy może wywołać ją wchodząc na adres.

A jak usunąć konkretny wpis na bloga? Zrobić w klasie strona funkcją usun_wpis. Jednak zanim masowo sprawdzicie czy możecie rozwalić blog geek factory z góry odpowiem że nie (a przynajmniej nie w ten sposób). Dlaczemu? Bo usun_wpis jest właśnie funkcją private i nie ma do niej dostępu z zewnątrz. Może to trochę duże uproszczenie, ale wydaje mi się że dość dobrze obrazuje celowość korzystania z public i private function. Na dziś tyle - czas iść programować.

Autor: Geek Factory
Powrót
Serwis korzysta z plików cookies w celu świadczenia spersonalizowanych usług na najwyższym poziomie, w tym usług statystycznych oraz w celu dostosowania zawartości do indywidualnych preferencji Użytkowników, zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.