[PHP] Kilka pytań o obiektowości


(Krzysiekaczor) #1

Hej!

Mam kilka pytań dotyczących obiektowości w PHP:

  • po co w metodzie klasy odwoływać się do zmiennych przez $this? Bez tego też działa.

  • jaki jest domyślny typ (public, private) pola które nie jest deklarowane? ( i w ogóle po co je deklarować)

  • jak z metody zwrócić kilka wartości? Jeżeli nadałem im typ public to i tak jest widoczna tylko w klasie a nie poza nią, return przyjmuje tylko jedną zmienną :confused:

Książka z której się uczę nie odpowiada na te pytania :confused: a w googlach nic nie znalazłem.

Dziękuję za odpowiedź.


(Kofels) #2

Postaram się na te pytania odpowiedzieć, moze mało profesjonalnie, ale jak bede mógł, więc:

  1. Odwoływanie do zmiennych bez $this, self prowadzi tylko do zmiennych w metodzie, jeśli użyjemy tamtych operatorów odwołujemy się do zmiennnych w klasie, nie metodzie.

  2. Domyślny typ jest ... żaden. Wywali błąd. Deklaruje się je poto żeby określić czy zmienna/metoda ma byc dostępna z zewnątrz. Priavte tylko do wewnątrz.

  3. Niee, do zmiennych/method typu public możesz się dostać z zewnątrz, bez problemu...

Opisałem co wiem, dopiero mało się na tym znam. Pozdrawiam.

EDIT: Jak masz jeszcze jakieś pytania to pisz na gadu w profilu.


(flaszer) #3

Wszystko jak wyzej, z tym, że domyślny typ zmiennej(kiedy nie deklarujesz) to public.


(Kofels) #4

up

Albo się myle, albo tak jest w php5. ( tzn.że wywali błąd ) :wink:


(Airborn) #5

błędu nie wywali, bo przecież możesz z dowolnej metody utworzyć nowe pole obiektu poprzez $this->pole i tak utworzone pole będzie public. Po co w ogóle są specyfikatory dostępu? google: hermetyzacja

bez pseudo obiektu $this zadziałają tylko zmienne lokalne, nie dostaniesz się do zmiennych obiektu z wnętrza klasy bez tego

j.w. enkapsulacja

specyfikacja dostępu nie ma nic wspólnego ze zwracanymi wartościami. jeżeli chcesz zwracać, kilka wartości, to możesz np. zwracać tablicę wartości

return array($zmienna1, $zmienna2);[/code]albo ustawiać w obiekcie jakieś pola


[code=php]class Klasa{ustaw(){$this-zmienna1 = 'wart1';$this-zmienna2 = false;$this-zmienna3 = 22;

(Krzysiekaczor) #6

Wielki dzięki! Jak zawsze brawo dla Airborna =D> Ej jak coś to mogę się pytać o coś na priva air?

PS: Czyli np. jak mam klasę zwracającą 1 daną to mogę bez tego $this się obejść? Bo jeżeli chcę wyciągnąć dane to sprawdziłem i muszę.


(Airborn) #7

zostań na publicznym, może komuś się przyda, to nie trzeba będzie tego pisać dwa razy.

rozumiem, że masz na myśli metody, nie klasy?

$this to tylko pseudoobiekt wskazujący na pole/metodę konkretnego obiektu, wcale nie musisz jej używać do zwracania niczego


(Krzysiekaczor) #8

No tak chodziło mi o metodę :wink:

A mam kolejne noobskie pytanie :wink: jak moge z 1 klasy odwolac sie do metody z 2 klasy? Bo jak próbuje zrobić np. $news -> new news to nie dziala o_O


(Airborn) #9

to zależy. jeżeli metoda jest statyczna to możesz po prostu zrobić

::metoda();[/code]

jeżeli nie jest statyczna, to mususz stworzyć wpierw instancję tej klasy


[code=php]= new Klasa2;$obj_kl2-metoda();

rozumiem z tego co piszesz, że próbowałeś skorzystać z tej drugiej metody, ale pewnie Ci się pokręciły znaczki, nie ma - po news ;) musisz przypisać instancję obiektu do zmiennej czyli stosujesz operator przypisania =

(Krzysiekaczor) #10

A fakt ze mi się znaczki pokręciły :wink: za dożo tego php na dziś :wink: A jeszcze jedno (no może 2 :wink:) Co to znaczy ze metoda jest statyczna? Ten przykład z wiki do mnie nie przemawia :). A co w ogóle jest obiektem? o_O Po lekturze Wikipedii zrozumiałem że to synonim klasy ale to nie jest klasa :confused:

Dzięki za szybko odpowiedź i sorka za trucie d**y :wink:


(Airborn) #11

obiektem jest instancja danej klasy. każda klasa może posiadać w dokumencie wiele obiektów (generalizując, bo mogą istnieć klasy nie pozwalające na tworzenie wielu instancji vide Singleton)


(Krzysiekaczor) #12

No dzięki chyba skapowałem :wink: A co do tego Eclipse to rzeczywiście mam to PDT (tak to jest jak się nie umie człowiek wysłowić :wink:) Wcześniej miałem Notepad++ i w UFT-8 pod firefoxem 3 nie wyświetlało mi poprawnie chyba ś i ą a pod Eclipse mogłem sobie kodowanie na ISO ustawić i teraz wszytko śmiga. Dzięki za pomoc!


(Airborn) #13

hmm, też spotykałem się czasem z różnymi problemami gdy korzystałem (nadal korzystam) z Notepada++ i UTF-8, przyczyną było najczęściej błędnie wybrane kodowanie, nie powinno ię wybierać UTF-8, a UTF-8 without BOM (było też chyba coś w stylu ASCII as UTF)


(Krzysiekaczor) #14

Też miałem problem z tym BOM ale wystarczyło wybrać UFT-8 without BOM i był spokój. Już się przyzwyczajam do tego PDT - podoba mi się :wink: A czy to w ogóle się w systemie nie instaluje? Bo nie było żadnego instalatora tylko chyba stworzył workspace.