Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> klasa i przypisanie jej do zmiennej.
KotWButach
post 19.03.2012, 20:34:03
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


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?
Go to the top of the page
+Quote Post
Orzeszekk
post 19.03.2012, 20:38:39
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


  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.  


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
KotWButach
post 19.03.2012, 22:46:27
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


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ą?
Go to the top of the page
+Quote Post
crocodillo
post 19.03.2012, 22:57:39
Post #4





Grupa: Zarejestrowani
Postów: 215
Pomógł: 44
Dołączył: 31.07.2011
Skąd: wrocław

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


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
Go to the top of the page
+Quote Post
KotWButach
post 19.03.2012, 23:05:40
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


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.  


Ten post edytował KotWButach 19.03.2012, 23:10:46
Go to the top of the page
+Quote Post
marcio
post 20.03.2012, 01:21:00
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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

Ten post edytował marcio 20.03.2012, 01:22:19


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
KotWButach
post 20.03.2012, 02:07:47
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


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.

Ten post edytował KotWButach 20.03.2012, 02:23:05
Go to the top of the page
+Quote Post
marcio
post 20.03.2012, 08:27:15
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:05