Skocz do zawartości
jahulen

[PHP] Pobieranie danych do zmiennych klasy

Rekomendowane odpowiedzi

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez stark

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...