Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: klasa i przypisanie jej do zmiennej.
Forum PHP.pl > Forum > PHP > Object-oriented programming
KotWButach
Witam
Mam problem.

Mam klasę
  1.  
  2. class Cos{
  3.  
  4. function __construct() {
  5. echo 'shit happens';
  6. }
  7.  


i teraz czy da się robić coś by to ECHO wypisało się dopiero przy wypsaniu zmiennej w taki sposób.

  1.  
  2. $cos = new cos; //spowoduje wypisanie echa...
  3.  
  4. echo $cos; // <--- chcial bym by dopiero tu sie wypisało
  5.  


Proszę o pomoc czy tak się w ogóle da?
Orzeszekk
  1. class ShitHappens
  2. {
  3. private $shitDescription;
  4. public function __construct($whatShitHappened)
  5. {
  6. $this->shitDescription = $whatShitHappened;
  7. }
  8.  
  9. public function __toString()
  10. {
  11. return sprintf("My shit description is %s.", $this->shitDescription);
  12. }
  13. }
  14.  
  15. $shitHappens = new ShitHappens("total shit");
  16. echo $shitHappens;
  17.  
  18. // wydrukuje: My shit description is total shit.
  19.  
KotWButach
Witam
Dzięki za tak szybką odpowiedź. Prawie działa sad.gif ponieważ przesyłam to po MVC i w dodatku formularze. Dokładnie chciałem w ten sposób ładować moduły do View. By nie pisać module::set(XXX); tylko echo $logowanie.

Problem pojawia się krytyczny niestety sad.gif

Catchable fatal error: Method Login::__toString() must return a string value in D:\[...]

Czy można coś z tym zrobić? Czy może inną metodą?
crocodillo
Cytat(KotWButach @ 19.03.2012, 22:46:27 ) *
Catchable fatal error: Method Login::__toString() must return a string value in D:\[...]


Wartość zwracana przez __toString() musi być stringiem, jak nie wiesz jak sobie poradzić pokaż swój kod
KotWButach
Plik CONTROLLER INDEX
  1. <?php
  2.  
  3. class Index extends Controller{
  4.  
  5. public $data;
  6.  
  7. function __construct() {
  8. parent::__construct(); // nie ważne
  9.  
  10.  
  11. $loginModule = View::renderOther('controllers', 'login'); // tutaj toString()
  12. $this->data = new $loginModule; // Przypisanie do DATA celem ulatwienia dla render;
  13.  
  14. View::render(PATH_TEMPLATE.'index', TRUE, $this->data); // pobiera data i można uzywać jak tablicy w VIEW. + INCLUDE file
  15. }
  16. }


PLIK VIEW INDEX
  1. <?php
  2. echo 'template';
  3. echo $data;
  4.  


PLIK CONTROLLER LOGOWANIA
  1. <?php
  2.  
  3. class Login extends Controller{
  4.  
  5. function __construct() {
  6. parent::__construct();
  7.  
  8. }
  9.  
  10. function __toString() {
  11. return View::render(PATH_TEMPLATE.'login', TRUE);
  12. }
  13.  
  14. }


PLIK VIEW LOGOWANIA
  1. <form action="#">
  2. <input type="text" name="uu" value="" />
  3. <input type="submit" value="" />
  4. </form>
  5.  
marcio
Kod
$loginModule = View::renderOther('controllers', 'login'); // tutaj toString()
$this->data = new $loginModule; // Przypisanie do DATA celem ulatwienia dla render;

To w ogole nie ma sensu, po co ci tam new skoro zwraca string?

btw: nie mowiac juz o reszcie
KotWButach
Gdyby wszystko działało to bym nie pisał przecież tutaj. Napisałeś tylko że coś jest bez sensu i tyle...
Co do new to z zasady że __constructor nie musi być pusty i raczej nigdy nie będzie. Ale jakoś musze przekazać View że coś należy wypisać.

Orzeszekk podpowiedział mi about toString i zaczołem koło tego kombinować może to trzeba inaczej? Nie wiem dlatego proszę was o pomoc. Bo to że mi nie działa to ja widzę hlip hlip.

wstydnis.gif

ps

by daleko nie szukać Przem4S zrobił coś podobnego i pozwolilem sobie załadować tutaj ten kodzik
  1. public function index()
  2. {
  3. // Zainicjowanie zmiennej która zostanie wprowadzona do widoku:
  4. $var = null;
  5. // Załadowanie modelu:
  6. $this -> load -> model('setup');
  7. $model = new Model_Setup; // Przypisanie widoku w kontrolerze
  8. $var['title'] = $model -> get_title();
  9. // Załadowanie widoku i przekazanie do niej zmiennych:
  10. $this -> load -> view('setup', $var);
  11. }


tylko nie wiem co jak to jest zrobione ze działa?

oczywiście on ma inny problem niż ja
Temat: Zagadnienie co do wzorca MVC

a wiec jak to jest że ten fragment nie powoduje wyswietlenia sie zawartosci a dopiero $var to robi
  1. $model = new Model_Setup;


ale mysle ze ten kodzik z zasady robi cos zbliżonego do mojego kodu w zamyśle.
marcio
Poczytaj o extract() lub ewentualnie o nadpisaniu zmiennych za pomoca "$$zmienna".

Cytat
Gdyby wszystko działało to bym nie pisał przecież tutaj. Napisałeś tylko że coś jest bez sensu i tyle...

Poprostu w zmiennej $loginModulue masz string prawda?Wiec jaki jest sens tego:
Kod
$this->data = new $loginModule;

Te new nie ma tam prawa bytu, uzywa sie je gdy tworzy sie obiekt, a ty w zmiennej $loginModule masz string wiec robisz normalne przypisanie wartosci.

Wejdz w dzial "gotowe klasy" i poszukaj tam klas do renderowania template'ow czy widokow przeanalizuj i bedziesz wiedzial jak to dziala bo poki co zadajesz zbyt ogolne pytania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.