Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: -> __toString;
Forum PHP.pl > Forum > Przedszkole
Krzychur
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. ?>
chmolu
echo (string) $obj;
Krzychur
nawet i bez trim(), takie rozwiazanie wyświetla "Object id #1".
crash
A nie możesz wykonać tych dodatkowych operacji wewnątrz __toString() ?
Krzychur
nie nie mogę, bo to tylko jeden z przykładów.

Zawsze jak piszę na tym forum to używam najprostszych przykładów.
chmolu
Najpierw zapisz w zmiennej, a później rób trim:

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

Musi działać.
Krzychur
chmolu, oczywiście, że to będzie działać, ale
Cytat("Ja - 1st post")
(...)  bez przypisywania jej do kolejnej zmiennej.
NuLL
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
dr_bonzo
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
Krzychur
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.
dr_bonzo
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.
Nievinny
@dr_bonzo -> Ja myślę, że w PHP5.1 może wreszcie będzie.
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.