Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> -> __toString;
Krzychur
post 22.06.2005, 14:11:46
Post #1





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

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


Witam!
Czy jest jakaś możliwość na wyświetlenie obiektu (za pomocą metody __toString()), bez konieczności podawania tejże nazwy, podczas gdy chcemy zrobić jeszcze jakąś operację na stringu, bez przypisywania jej do kolejnej zmiennej.

  1. <?php
  2. class asdf {
  3.  private text;
  4.  
  5.  public function __construct($i) {
  6. $this -> text = $i;
  7.  }
  8.  public function __toString() {
  9. return $this -> text;
  10.  }
  11. }
  12.  
  13. $asdf = new asdf(' tekst ');
  14. echo trim($asdf);
  15. ?>


Rozwiązanie oczywiście nie zadziała, zadziałałoby, jeżeli byłoby samo
  1. <?php
  2. (...)
  3. echo $asdf
  4. ?>


--------------------
Go to the top of the page
+Quote Post
chmolu
post 22.06.2005, 14:15:26
Post #2





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

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


echo (string) $obj;
Go to the top of the page
+Quote Post
Krzychur
post 22.06.2005, 14:47:51
Post #3





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

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


nawet i bez trim(), takie rozwiazanie wyświetla "Object id #1".


--------------------
Go to the top of the page
+Quote Post
crash
post 22.06.2005, 15:28:32
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


A nie możesz wykonać tych dodatkowych operacji wewnątrz __toString() ?


--------------------
Go to the top of the page
+Quote Post
Krzychur
post 22.06.2005, 15:49:45
Post #5





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

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


nie nie mogę, bo to tylko jeden z przykładów.

Zawsze jak piszę na tym forum to używam najprostszych przykładów.

Ten post edytował Krzychur 22.06.2005, 16:02:56


--------------------
Go to the top of the page
+Quote Post
chmolu
post 22.06.2005, 16:21:55
Post #6





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

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


Najpierw zapisz w zmiennej, a później rób trim:

$str = (string) $obj;
echo trim($str).

Musi działać.
Go to the top of the page
+Quote Post
Krzychur
post 22.06.2005, 16:24:07
Post #7





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

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


chmolu, oczywiście, że to będzie działać, ale
Cytat("Ja - 1st post")
(...)  bez przypisywania jej do kolejnej zmiennej.


--------------------
Go to the top of the page
+Quote Post
NuLL
post 22.06.2005, 16:30:05
Post #8





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Nie da się - skąd php ma wiedzieć co wypisać - może tą własność klasy chcesz wypissać a inne nie - przecież php nie zgadnie tego smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
dr_bonzo
post 22.06.2005, 16:35:26
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Jak podaje nasz kochany manual:
Cytat
It is worth noting that the __toString method will only be called when it is directly combined with echo() or print().

  1. <?php
  2. // __toString called
  3. echo $class;
  4.  
  5. // __toString called (still a normal parameter for echo)
  6. echo 'text', $class;
  7.  
  8. // __toString not called (concatenation operator used first)
  9. echo 'text' . $class;
  10.  
  11. // __toString not called (cast to string first)
  12. echo (string) $class;
  13.  
  14. // __toString not called (cast to string first)
  15. echo &#092;"text $class\";
  16. ?>

http://pl.php.net/manual/en/language.oop5.magic.php


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Krzychur
post 22.06.2005, 19:04:43
Post #10





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.01.2004
Skąd: Łódź

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


NO więc właśnie, dzięki za wyskrobanie tego zasobu...

A do NuLL:
No poprzedzając we wcześniejszych wersjach php obiekt samym słowem echo, php też mógłby zgadywać co mam na myśli... Tylko w tej go tego nauczyli winksmiley.jpg.

Ten post edytował Krzychur 22.06.2005, 19:05:01


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 22.06.2005, 19:19:56
Post #11





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Szkoda ze to __toString() jest takie jakie jest, praktycznie bezuzyteczne -- a nie takie jakie w Javie -- gdzie dziala tak jak mozna by od niego oczekiwac.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Nievinny
post 22.06.2005, 19:35:01
Post #12





Grupa: Zarejestrowani
Postów: 134
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Białystok

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


@dr_bonzo -> Ja myślę, że w PHP5.1 może wreszcie będzie.


--------------------
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: 12.07.2025 - 09:24