Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> obiekty i stringi - ciekawe...
Cysiaczek
post
Post #1





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




  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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




No ja to wiem. Napisałem przecież. Zastanawia mnie tylko, dlaczego tak się dzieje.
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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 (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif) )

Dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Cysiaczek 8.07.2006, 22:57:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 09:37