Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obiekty i stringi - ciekawe...
Forum PHP.pl > Forum > PHP
Cysiaczek
  1. <?php
  2. class meCool{
  3.  
  4. public $text;
  5.  
  6. public function __construct(){
  7. $this->text='Cysiaczek is cool!';
  8. }
  9. }
  10.  
  11. class holdMyObjects{
  12. public $imNotCool;
  13. public $imCool;
  14.  
  15. public function __construct(){
  16. $this->imNotCool=new meCool();
  17. $this->imCool='Oh yes, its true';
  18. }
  19. }
  20.  
  21. $iToldYouThat=new holdMyObjects();
  22.  
  23. $str="Someone cool? Re: $iToldYouThat->imNotCool->text"; //he is right
  24. $str2="Someone cool? Re: $iToldYouThat->imCool";
  25. $str3="Someone cool? Re: ".$iToldYouThat->imNotCool->text; //he IS COOL here
  26. print $str.'<br>'.$str2.'<br>'.$str3;
  27. ?>


Prosze sobie przetestować. nie, żebym sobie z tym nie poradził, bo poradzę, ale ciekawi mnie dlaczego tak się dzieje. Czy traktowac to jako błąd php, czy jako sugestywną prośbę autorów silnika, aby pisać z użyciem operatorów. Może jednak coś innego? Będę wdzięczny za uświadomienia Mnie.

Pozdrawiam.
mike
No ale o co chodzi?
Robisz tak:
  1. <?php
  2.  
  3. $str="Someone cool? Re: {$iToldYouThat->imNotCool->text}";
  4.  
  5. ?>
i po problemie.

Zapraszam do podstaw: Podręcznik php :: Typy danych :: Łańcuchy znaków (string)
Cysiaczek
No ja to wiem. Napisałem przecież. Zastanawia mnie tylko, dlaczego tak się dzieje.
mike
Hmmm a dlaczego for działa tak jak działa?
Dlaczego echo coś wypluwa?
Dlaczego exit coś zatrzymuje?

Dlatego że tak jest skonstruowany język i takie są założenia projektantów tongue.gif

... z manuala
Cytat
Składnia złożona

Nazwa tej składni nie pochodzi od skomplikowanego zapisu, tylko od możliwości obsługi bardziej złożonych wyrażeń.

Za pomocą tej składni można umieszczać w łańcuchach znaków każdą wartość istniejącą w przestrzeni nazw. Odpowiednie wyrażenie pisze się tak, jakby miało ono znajdować się gdziekolwiek poza łańcuchem znaków, a potem tylko umieszcza się je między { i }. Ponieważ nie można cytować "{", składnia ta będzie prawidłowo rozpoznana tylko wtedy, kiedy $ znajduje się bezpośrednio za {. (Użyj "{\$" lub "\{$" aby uzyskać "{$"). Poniżej kilka przykładów:
  1. <?php
  2. $fajne = 'fantastyczne';
  3. echo "To jest { $fajne}"; // nie działa, zwraca: To jest { fantastyczne}
  4. echo "To jest {$fajne}"; // działa, zwraca: To jest fantastyczne
  5. echo "Kwadrat ma szerokość {$kwadrat->szerokość}00 centimetrów.";
  6. echo "To działa: {$arr[4][3]}";  
  7.  
  8. // Tak jest źle z tego samego powodu
  9. // co $foo[bar] poza łańcuchem.
  10. echo "Tak jest źle: {$arr[foo][3]}";
  11.  
  12. echo "Prawidłowo jest tak: {$arr['foo'][3]}";
  13. echo "Można nawet pisać tak: {$obj->wartości[3]->nazwa}";
  14. echo "To jest wartość zmiennej o nazwie $nazwa: {${$nazwa}}";
  15. ?>
Cysiaczek
Cóż - pozostaje mi tylko przestać zajmować się tak głupimi problemami (a już myślałem, że będę sławny, bo buga znalazłem rolleyes.gif )

Dzięki smile.gif
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.