jahulen Opublikowano 12 Maja 2011 Zgłoś Opublikowano 12 Maja 2011 Witam, problem jest taki, mam klasę: class MojaKlasa { public $a; public $b; public $c; } i chciałbym stworzyć formularz w który można wpisać dane które utworzą nowy obiekt np 'obiekt' MojaKlasa i 3 zmienne z formularza wrzuci do zmiennych $a, $b, $c. Umiem przekazywać dane do zmiennych metodą POST ale nie wiem jak to zrobić aby zmienne utworzyły nowy obiekt. Pomożecie? Szukałem czegoś na ten temat w internecie, książkach które mam i nic nie znalazłem. Dodam, że nie mam (jeszcze) pojęcia o bazach danych. Z góry dzięki za odp. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 12 Maja 2011 Zgłoś Opublikowano 12 Maja 2011 PHP/Klasy i obiekty - Wikibooks, biblioteka wolnych podręczników Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
m4r Opublikowano 14 Maja 2011 Zgłoś Opublikowano 14 Maja 2011 Starałem się jakoś opisać w komentarzach, co jest do czego. Ale paru skrótów myślowych możesz nie ogarniać - np. func_get_args() pozwala na przekazanie do funkcji praktycznie dowolnej liczby dowolnych argumentów, bez potrzeby deklarowania argumentów bezpośrednio w funkcji. Ma to i zalety, i wady - tutaj zalety, bo nie trzeba w konstruktorze pisać listy argumentów, która bez użycia func_get_args() wyglądałaby jakoś tak "__construct($a=null,$b=...". Co poza tym... PHP pozwala na żonglerkę typami zmiennych, więc możesz raz wstawić za MojaKlasa::a liczbę, innym razem string. <? header("Content-Type: text/html; charset=utf-8"); ?> <pre> <? class MojaKlasa { public $a; public $b; public $c; public function __construct() { //konstruktor $ile_arg = func_num_args(); //sprawdzamy czy wrzuciliśmy zmienne w konstruktorze if( $ile_arg > 0 ){ // jeżeli mamy jakieś zmienne $args = func_get_args(); // przypisujemy wartości zmiennych przekazanych na liście argumentów konstruktora (jeżeli jakieś były/będa) do konkretnych zmiennych obiektu $this -> a = $args[0]; $this -> b = $args[1]; $this -> c = $args[2]; // jeżeli argumentów będzie więcej niż 3, zostaną najprawdopodobniej zignorowane (nie sprawdziłem) } } public function set_a( $zm ) { // ustawiamy samo "a" $this -> a = $zm; } public function set_b( $zm ) { // ustawiamy "b" $this -> b = $zm; } public function set_c( $zm ) { // analogicznie "c" $this -> c = $zm; } // trzy powyższe funkcje można zastąpić jedną, ale trochę komplikuje się zapis, trzeba dodać zabezpieczenia idiotoodporne, etc. public function poka_zmienne($nazwa=false){ // wyświetlamy zmienne, $nazwa to nazwa zmiennej if( is_string($nazwa) ) { if ( isset( $this -> $nazwa ) ) { echo $nazwa . ' ('.gettype($this -> $nazwa) . '): '; print_r($this -> $nazwa); echo "\n"; } else echo $nazwa . ": Nie ma takiej zmiennej wewnątrz klasy, lub zmienna ma wartość NULL \n"; return 0; } else { echo 'a ('.gettype($this -> a) . '): '; print_r($this -> a); echo "\n"; echo 'b ('.gettype($this -> b) . '): '; print_r($this -> b); echo "\n"; echo 'c ('.gettype($this -> c) . '): '; print_r($this -> c); echo "\n"; return 0; } } } // użycie klasy, funkcji, etc $ob = new MojaKlasa(2,'test'); //tworzymy nowy obiekt MojaKlasa, używając konstruktora. Od razu w konstruktorze podajemy wartości zmiennych $ob -> poka_zmienne(); // wyświetlamy zmienne $ob -> poka_zmienne('z'); // sprawdzamy co się stanie, jeżeli wyświetlimy zmienną, której wewnątrz obiektu nie ma $ob -> set_c(true); // zmieniamy wartość jednej zmiennej. Zmienia się też jej typ $ob -> poka_zmienne(); // jeszcze raz wyświetlanym zmienne ?> </pre> Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
stark Opublikowano 14 Maja 2011 Zgłoś Opublikowano 14 Maja 2011 (edytowane) Jeszcze jest oczywiście: <?php $class = new MojaKlasa(); $class->a = '5'; $class->b = '10'; $class->b = "string"; echo 'Zmienne klasy: ' . $class->a . ', ' . $class->b . ', ' . $class->c; ?> Edytowane 14 Maja 2011 przez stark Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...