Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> przekazanie zmiennej
Maciek1705
post
Post #1





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


Witam mam pewien problem na początek dodam że to pierwszy mój skrypt w oop więc pewnie głupie pytanie zadam. Przedstawię kod:
  1. class sample{
  2. // tutaj znajduje się środek klasy deklaracja zmiennych oraz funkcja
  3. }
  4.  
  5. $sample = new sample();
  6. $ZMIENNA = $sample->long();
  7.  
  8. class to_next{
  9. private $current_position = ?;
  10.  
  11. dalszy ciąg kodu
  12. }


jak zrobić żeby przekazać wartość $ZMIENNA od razu do $current_position żeby wyglądało to tak:
private $current_position = $ZMIENNA;

tylko że tak się nie da, próbowałem różnych opcji ale nie wiem czy podczas deklaracji rodzaju zmiennej można nadać jej wartość innej zmiennej?
Go to the top of the page
+Quote Post
!*!
post
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Wywołujesz klasę to_next z jakimś parametrem np.

  1. to_next($ZMIENNA);


Poczym w __construct($zmienna) przypisujesz

  1. $this-> current_position = $zmienna;


Ewentualnie:

W __construct klasy to_next, robisz

  1. $sample = new sample();
  2. $this-> current_position = $sample->long();


Ten post edytował !*! 27.06.2012, 11:02:04


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze rozumiem

  1. class Sample
  2. {
  3. public $current_position;
  4. public function __construct($current_position)
  5. {
  6. $this->current_position = $current_position;
  7. }
  8. }
  9.  
  10. $obj = new Sample(5);
Go to the top of the page
+Quote Post
Maciek1705
post
Post #4





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


nie nie ok tak wiem że można ale nie do końca o to chodzi spójrzmy na to tak

  1.  
  2. class pierwsza{
  3.  
  4. }
  5.  
  6.  
  7. $pierwsza = new pierwsza();
  8. $X = $pierwsza->long();
  9.  
  10. class druga{
  11. deklaracja zmiennych
  12.  
  13. public $moja-zmienna = 1;
  14.  
  15. teraz pytanie jak zamiast tej jedynki dokładnie w tym miejscu bez kończenia klasy itp wstawić inną zmienną która jest powyżej klasy np $X
  16.  
  17. chodzi mi o przekazanie zmiennych między klasami ten $X jest wynikiem działania jednej z klas jest umiejscowiony przed klasą a nie wewnątrz chce po prostu przypisać public $moja-zmienna = $X; tylko taki zapis jest błędny
  18. .....
  19.  
  20. }
  21.  
  22.  
  23.  
  24.  
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie da się i już.

Napisz lepiej co chcesz przez to osiągnąć to ci napiszemy jak to zrobić a nie sam bez sensu kombinujesz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Szymciosek
post
Post #6





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


No właśnie autor tak trochę bez sensu kombinuje, nie chciałem tego pisać, ale już ok.
Są inne sposoby na takie działania tylko nie wiemy o co chodzi.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
nie chciałem tego pisać, ale już ok.
No ale skoro się znalazł taki jeden wredny co to napisał to już ok.... wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Nie możesz ponieważ klasy są hermetyczne i wszytko co jest w nich, działa tylko w ich obrębie, a dane z zewnątrz o ile nie są do nich przekazywane, zwyczajnie nie zadziałają. Musisz przekazywać informacje do klasy, a na tym polega oop (szczególnie że 1 plik = 1 klasa).


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Maciek1705
post
Post #9





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


już Wam mówię o co chodzi.
jest plik do zmiany wersji językowej, działa super nie mam zastrzeżeń, posiada jedną klasę a w niej na początku są 4 zmienne z czego jedna mnie interesuje jest to private current_language = FALSE; czyli bieżący język jest ustawiony na 0. Przed tą klasą w tym samym pliku dopisałem inną klasę geolokalizacji która sprawdza gdzie się znajdujesz i jaki włączyć Ci bieżący język strony. Ta klasa działa też bez zarzutu w $X mam kod danego kraju który chciałem przekazać do tej drugiej klasy do zmiennej private current_language która domyślnie jest pusta. W jednym z tematów na tym forum było poruszone zagadnienie przekazania zmiennej pomiędzy klasami lecz u mnie to nie działało. Może inaczej jak taki kod:
  1. class sample{
  2. public $cur_lang = FALSE;
  3.  
  4. public function geo_lang(){
  5. switch($_SESSION['code']):
  6. case "PL":
  7. $this->cur_lang = 'pl';
  8. break;
  9. default:
  10. $this->cur_lang = 'en';
  11. endswitch;
  12.  
  13. return $this->cur_lang;
  14. }
  15. }


zmieścić w tej zmiennej:
  1. private $current_language = ;

tak żeby ta zmienna była równa wynikowi działania klasy powyżej
Go to the top of the page
+Quote Post
peter13135
post
Post #10





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Nie chce mi się specjalnie czytać tego tematu, więc dam swojego exampla, mam nadzieję, że trafiłem w sedno tematu.

  1.  
  2. class klasa1
  3. {
  4. private $zmienna ;
  5. public function __construct()
  6. {
  7. róbCoś()
  8. }
  9.  
  10. private function róbCoś()
  11. {
  12. $this->zmienna = 1;
  13. }
  14.  
  15. public function getZmienna()
  16. {
  17. return $this->zmienna;
  18. }
  19.  
  20. }
  21.  
  22. class klasa2 {
  23.  
  24. private $zmienna;
  25.  
  26. public function __construct()
  27. {
  28. $this->zmienna = 0;
  29. }
  30.  
  31. public function setZmienna($v)
  32. {
  33. $this->zmienna = $v;
  34. }
  35.  
  36. }
  37.  
  38.  
  39. $ob1 = new klasa1;//konstruktur wywołuje metodę, która ustawia wartość "zmienna" na 1
  40. $ob2 = new klasa2;// "zmienna" ma wartość 0
  41. $ob2->setZmienna($ob1->getZmienna());
  42.  


--------------------
:)
Go to the top of the page
+Quote Post
Maciek1705
post
Post #11





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


przerobiłem już tak skrypt że zmienną mam w sesji teraz kwestia ustawienia jej to znaczy jak zrobić w oop coś takiego
  1. private $curent_lang = $_SESSION['lang'];


taki zapis jest błędny chodź nie do końca wiem dlaczego, więc jak teraz zrobić żeby zmiennej $curent_lang przypisać wartość zmiennej sesyjnej $_SESSION['lang']questionmark.gif?
Go to the top of the page
+Quote Post
peter13135
post
Post #12





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


No stary, to podstawy. Dałem Ci przykład przecież.

Robisz sobie metodę do ustawiania zmiennej :

  1.  
  2. public function setCurrentLang($v)
  3. {
  4. $this->current_lang = $v;
  5. }
  6.  



i na swoim obiekcie robisz operacje :
  1. $obiekt->setCurrentLang($_SESSION['costam']);//ovzywiście zamiast sesji może byc dowolna zmienna liub stała.


--------------------
:)
Go to the top of the page
+Quote Post
Maciek1705
post
Post #13





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


nie no wszystko ok za przykład dziękuje ale ale wszystko ok do czasu przykład się sprawdza ale problem polega na tym jak to zrobić wewnątrz klasy pierwszy przykład był jak ustawić na zewnątrz klasy, zrobinie metody nie jest problemem dla mnie, nie potrafię tej metody wywołać wewnątrz klasy ot cały problem
Go to the top of the page
+Quote Post
!*!
post
Post #14





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Czytałeś co napisałem? Klasy są hermetyczne. Więc jak chcesz przesłać coś z zewnątrz, bez wywołania metody? Nie ma sposobu i nie kombinuj, tylko zrób to jak należy.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
thek
post
Post #15





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A to nie może użyć konstruktora sparametryzowanego? wink.gif Ludzie... Czy zawsze musi być
new Klasa
a nie może być new Klasa(parametr) questionmark.gif
Poczytajcie manual choćby do dowolnego języka OOP, bo PHP tak też działa
  1. public function __construct($param)
  2. {
  3. $this->_zmienna_prywatna = $param;
  4. }

To nam załatwia problem elegancko. W ten sposób można przecież inicjalizować jedną klasę obiektami innej klasy... Popatrzcie choćby na inne niż PHP języki. Tam nieraz nie ma jednego ale kilka konstruktorów reagujących na obiekt przesłany jako parametr i dzięki temu można różne wersje konstruktora odpalić.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
!*!
post
Post #16





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


To jest tak oczywiste że nie warto o tym wspominać.
Powód edycji: [thek]: I chyba dlatego najprostsze rzeczy najtrudniej przychodzą do głowy ;)


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Maciek1705
post
Post #17





Grupa: Zarejestrowani
Postów: 157
Pomógł: 3
Dołączył: 15.06.2009

Ostrzeżenie: (0%)
-----


podpowiedź thek podziałała dzięki za pomoc
Go to the top of the page
+Quote Post
Szymciosek
post
Post #18





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Cytat(thek @ 27.06.2012, 22:58:55 ) *
A to nie może użyć konstruktora sparametryzowanego? wink.gif Ludzie... Czy zawsze musi być
new Klasa
a nie może być new Klasa(parametr) questionmark.gif
Poczytajcie manual choćby do dowolnego języka OOP, bo PHP tak też działa
  1. public function __construct($param)
  2. {
  3. $this->_zmienna_prywatna = $param;
  4. }

To nam załatwia problem elegancko. W ten sposób można przecież inicjalizować jedną klasę obiektami innej klasy... Popatrzcie choćby na inne niż PHP języki. Tam nieraz nie ma jednego ale kilka konstruktorów reagujących na obiekt przesłany jako parametr i dzięki temu można różne wersje konstruktora odpalić.


Dobrze, że autor dopiero teraz zauważył, bo już na samym początku napisałem to samo z przekazaniem zmiennej poprzez konstruktor klasy.
Go to the top of the page
+Quote Post
thek
post
Post #19





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Szymciosek: Ty i !*! też to zrobiliście, ale !*! zamieszał w to jeszcze settera (zupełnie niepotrzebnie, choć już zaznaczył tam konstrukcję __construct($zmienna) ) i stąd może autor się pogubił. Ja tylko nieco mocniej zaznaczyłem, że takie rozwiązanie istnieje i dziwiłem się, że niektórzy tego albo nie zauważyli, albo cudują. Swój punkt przeniosłem na Was obu, bo to Wam się on należy. Ja tylko potrząsnąłem autorem by wrócił "na właściwe tory" wink.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:15