+ Odpowiedz w tym wątku
Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 13

Wątek: Zmienna działająca nie tylko w funkcji

  1. #1
    Zasłużony Awatar Rodkan
    Dołączył
    Mar 2011
    Posty
    907

    Domyślnie Zmienna działająca nie tylko w funkcji

    Więc mam sobie klasę, niech będzie klasa testy, w owej klasie w funkcji __construct znajduje się zmienna załóżmy $x i jest ona tablicą. Chciałbym aby można było jej używać nie tylko w owej funkcji. Przykładowy kod:
    Kod php:
    class testy {
      public function 
    __construct(){
        
    $x = array(123);
      }

    Forumowy Smerf
    Jestem chamski i arogancki. I jest mi z tym dobrze.
    Co nie znaczy że innym też.

    Cytat Zamieszczone przez carnageon Zobacz posta
    Mityczny odsyłacz do wujka google i manuala. Postrach dzieci, administratorów Xnovy i Vallheru. Maszynka do gnojenia noobów.

  2. #2
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    110

    Domyślnie

    W tym wypadku najlepiej aby ta zmienna to była zmienna należąca do klasy lub do obiektu.

    Jeśli chciałbyś, aby ta zmienna była wspólna dla wszystkich obiektów klasy to można zadeklarować ją jako statyczną:

    Kod php:
    class testy 

      public static 
    $y;

      public function 
    __construct(){ 
        
    $x = array(123);
        
    self::$y $x
      } 
    }

    $z testy::$y// $z = array(1, 2, 3) 
    Jeśli zaś chciałbyś aby zmienna ta była inna dla każdej instancji klasy testy, wtedy można ją zadeklarować jako zwykły atrybut obiektu klasy testy:

    Kod php:
    class testy 

      public 
    $y;

      public function 
    __construct(){ 
        
    $x = array(123);
        
    $this->$x
      } 
    }

    $test1 = new testy();
    print_r($test1->y); //powinno wypisać array(1,2,3);

    $test2 = new testy();
    $test2->y[] = 4;

    print_r($test2->y); //powinno wypisać array(1,2,3,4);

    $test3 = new testy();
    print_r($test3->y); //powinno wypisać array(1,2,3); 
    Jeśli coś jest niezrozumiałe, albo walnąłem gdzieś głupi błąd daj znać.
    Tworzę przeglądarkową grę o eksploracji kosmosu, zapraszam na Space Fleet Mania - blog developerski

    Stworzyłem całkiem niezłą, darmową, opartą na silniku ChoiceScript, grę tekstową RPG wielokrotnego wyboru o nazwie Imprisoned (dostępna również na platformy iOS/Android)

    MythThrazz

  3. #3
    Bugolog Vallheru'owski Awatar McFly
    Dołączył
    Feb 2008
    Posty
    398

    Domyślnie

    dlaczego statyczna ?
    Kod php:
    class testy {
      public 
    $x;
      public function 
    __construct(){
        
    $this -> = array(123);
      }
      public function 
    Foo(){
        return 
    $this -> x;
      }

    _________________
    Kontakt:
    GG: 5828088
    Jabber: mcfly@aqq.eu

  4. #4
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    110

    Domyślnie

    A po co metoda do zwracania publicznego atrybutu?

    ps. Przecież opisałem dlaczego statyczna i dlaczego niestatyczna.
    Tworzę przeglądarkową grę o eksploracji kosmosu, zapraszam na Space Fleet Mania - blog developerski

    Stworzyłem całkiem niezłą, darmową, opartą na silniku ChoiceScript, grę tekstową RPG wielokrotnego wyboru o nazwie Imprisoned (dostępna również na platformy iOS/Android)

    MythThrazz

  5. #5
    Zasłużony Awatar Rodkan
    Dołączył
    Mar 2011
    Posty
    907

    Domyślnie

    Działa, sam się dziwie czemu na to nie wpadłem o.o
    Forumowy Smerf
    Jestem chamski i arogancki. I jest mi z tym dobrze.
    Co nie znaczy że innym też.

    Cytat Zamieszczone przez carnageon Zobacz posta
    Mityczny odsyłacz do wujka google i manuala. Postrach dzieci, administratorów Xnovy i Vallheru. Maszynka do gnojenia noobów.

  6. #6
    Bugolog Vallheru'owski Awatar McFly
    Dołączył
    Feb 2008
    Posty
    398

    Domyślnie

    Cytat Zamieszczone przez MythThrazz Zobacz posta
    A po co metoda do zwracania publicznego atrybutu?

    ps. Przecież opisałem dlaczego statyczna i dlaczego niestatyczna.
    metoda jako przykładowa, myślałem że nazwanie "Foo" rozwiąże to... :/
    a cd. twojego tłumaczenia, rodkanowi chodziło o podstawowe użycie więc...
    KISS

    _________________
    Kontakt:
    GG: 5828088
    Jabber: mcfly@aqq.eu

  7. #7
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    110

    Domyślnie

    Twój kod:
    Kod php:
    class testy {
      public 
    $x;
      public function 
    __construct(){
        
    $this -> = array(123);
      }
      public function 
    Foo(){
        return 
    $this -> x;
      }

    Mój kod:
    Kod php:
    class testy {
      public 
    $x;
      public function 
    __construct(){
        
    $this -> = array(123);
      }

    Ty serio uważasz, że to JA komplikuję?
    Wyjaśnij mi w jakim celu tworzyć metodę, która zwraca wartość publicznej zmiennej?

    @All: Który sposób wypisywania wartości zmiennej $x wydaje wam się prostszy:
    1)
    Kod php:
    $test = new Test(); $bar $test->Foo(); 
    <- McFly'a
    2)
    Kod php:
    $test = new Test(); $baz $test->x
    <- Mój

    ps. Gdybyś zaproponował w swoim przykładzie atrybut prywatny (private $x) to coś by to przynajmniej wniosło.
    Tworzę przeglądarkową grę o eksploracji kosmosu, zapraszam na Space Fleet Mania - blog developerski

    Stworzyłem całkiem niezłą, darmową, opartą na silniku ChoiceScript, grę tekstową RPG wielokrotnego wyboru o nazwie Imprisoned (dostępna również na platformy iOS/Android)

    MythThrazz

  8. #8
    Programista
    Dołączył
    Apr 2011
    Posty
    89

    Domyślnie

    @McFly - jeżeli ktoś podaje przykłady, to musi przemyśleć co pisze, żeby nie robić żadnych błędów W tym przypadku getter za takowy można uznać, a nawet należy;p Owszem w niektórych sytuacjach tak się robi przy atrybutach publicznych, ale to są specyficzne przypadki, wykorzystanie niektórych wzorców itp., itd..
    @MythThrazz - co do metod statycznych też bym uważał. Przy pisaniu czegoś poważniejszego optymalniejszym rozwiązaniem będzie napisanie klasy kontenera i stworzenie jego instancji, niż wywoływanie metod statycznych. Taki uniwersalny kontener już może, a nawet powinien mieć napisane własne settery i gettery, bo zapisy typu $containter['system']['ver'] są niewygodne, pogarszają orientację w kodzie, z resztą ich istnienie jest po części ideą kontenerów. Robimy sobie jakąś metodę / w konstruktorze przez referencję ładujemy go do obiektu i możemy robić, co nam się podoba (stawiam ten & z przyzwyczajenia, interesujący się choć trochę szerzej programowaniem będą wiedzieć o co chodzi, a jakiś czas temu bez referencji zrobiło się coś, co się nie powinno stać, w przypadku złożonych danych (po maturze potestuję ;p)).

    Jeżeli się pojawi jakaś wiadomość do mnie, odpowiem, ale po czasie, nie miejcie tego za złe, ale ostatnio mam bardzo mało czasu na cokolwiek

  9. #9
    Bugolog Vallheru'owski Awatar McFly
    Dołączył
    Feb 2008
    Posty
    398

    Domyślnie

    wy chyba nie rozumiecie, nie podałem tej funkcji, iż miała by wyświetlając zmienną, tylko jak używać tej zmiennej w innych funkcjach... :/ inaczej nazwał bym ją getTest() ? trochę podstaw nazewnictwa chłopaki
    _________________
    Kontakt:
    GG: 5828088
    Jabber: mcfly@aqq.eu

  10. #10
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    110

    Domyślnie

    Cytat Zamieszczone przez Aravorn Zobacz posta
    @McFly - jeżeli ktoś podaje przykłady, to musi przemyśleć co pisze, żeby nie robić żadnych błędów W tym przypadku getter za takowy można uznać, a nawet należy;p Owszem w niektórych sytuacjach tak się robi przy atrybutach publicznych, ale to są specyficzne przypadki, wykorzystanie niektórych wzorców itp., itd..
    @MythThrazz - co do metod statycznych też bym uważał. Przy pisaniu czegoś poważniejszego optymalniejszym rozwiązaniem będzie napisanie klasy kontenera i stworzenie jego instancji, niż wywoływanie metod statycznych. Taki uniwersalny kontener już może, a nawet powinien mieć napisane własne settery i gettery, bo zapisy typu $containter['system']['ver'] są niewygodne, pogarszają orientację w kodzie, z resztą ich istnienie jest po części ideą kontenerów. Robimy sobie jakąś metodę / w konstruktorze przez referencję ładujemy go do obiektu i możemy robić, co nam się podoba (stawiam ten & z przyzwyczajenia, interesujący się choć trochę szerzej programowaniem będą wiedzieć o co chodzi, a jakiś czas temu bez referencji zrobiło się coś, co się nie powinno stać, w przypadku złożonych danych (po maturze potestuję ;p)).

    Jeżeli się pojawi jakaś wiadomość do mnie, odpowiem, ale po czasie, nie miejcie tego za złe, ale ostatnio mam bardzo mało czasu na cokolwiek
    Akurat przekazywanie takich uniwersalnych obiektów przez referencję to jedna z najobrzydliwszych rzeczy z jakimi się spotkałem. No ale to pewnie kwestia preferencji. Poza tym pod jakim względem to miałoby być optymalniejsze? Nie dość, że trzeba zająć miejsce na obiekt w pamięci, to w każdym obiekcie trzeba zająć miejsce na wskaźnik do tego obiektu, a ponadto trzeba pamiętać jaką nazwę nadaliśmy danemu kontenerowi w ramach tej klasy. A jeśli ktoś już naprawdę nie lubi metod statycznych to zawsze jest bardzo sympatyczny wzorzec Singleton...
    Tworzę przeglądarkową grę o eksploracji kosmosu, zapraszam na Space Fleet Mania - blog developerski

    Stworzyłem całkiem niezłą, darmową, opartą na silniku ChoiceScript, grę tekstową RPG wielokrotnego wyboru o nazwie Imprisoned (dostępna również na platformy iOS/Android)

    MythThrazz

+ Odpowiedz w tym wątku
Strona 1 z 2 12 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Tablesorter - działa tylko na localu
    By Speedy in forum JavaScript/AJAX
    Odpowiedzi: 0
    Ostatni post / autor: 18-01-2010, 20:35
  2. zakładka "surowce" nie działa, ale tylko na tym serwie
    By pionner121 in forum Błędy silnika Xnova
    Odpowiedzi: 2
    Ostatni post / autor: 06-12-2009, 15:24
  3. Xnova nie działa w Fireox, IE tylko w Chrome
    By aim92 in forum Pytania dotyczące silnika Xnova
    Odpowiedzi: 10
    Ostatni post / autor: 18-09-2009, 19:24
  4. 2 argumenty w funkcji co nie tak
    By Speedy in forum JavaScript/AJAX
    Odpowiedzi: 2
    Ostatni post / autor: 07-07-2009, 16:46

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów