Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: metody magiczne
Forum PHP.pl > Forum > PHP > Object-oriented programming
dtb
mam sobie obiekt:

  1. <?php
  2. class klasa {
  3. public $pole;
  4. public __construct() {
  5. $this->pole = 14;
  6. }
  7. }
  8. $obiekt = new klasa();
  9. ?>


i jak zrobic, aby gdy uzyje obiektu jak zwykla zmienna typu prostego zwrocil wartosc pola $pole (?), np:

  1. <?php
  2. echo $obiekt; // wyswietli 14
  3. echo ($obiekt + 12) // wyswietli 26
  4. // etc
  5. ?>


probowalem z metoda __toString(), ale moze ona zwracac tylko stringi (nie mam nic do stringow 8-D), wiec przyklad ($obiekt + 12) zwroci blad!
mike
A tak zadziała:
  1. <?php
  2.  
  3. $intResult = intval( $objObject ) + 12;
  4.  
  5. ?>
:?:

(nie mam pod ręką parsera :/)
dtb
moze i zadziala, ale nie o to mi chodzi. rownie dobrze moge zrobic: $obiekt->getInt(), ale zalezy mi na tym, aby mozna bylo używac sam $obiekt.
sf
http://pecl.php.net/package/operator
bigZbig
@dtb - zagadnienie ciekawe z teoretycznego punktu widzenia, ale do czego to by w praktycze mialo sluzyc. Inaczej mowiac jakia potrzeba uzasadnia stworzenie takiej wlasnie specyficznej konstrukcji?
ActivePlayer
  1. <?php
  2.  
  3.  
  4. class klasa {
  5. public $pole = 14;
  6.  
  7. function __toString(){
  8. return (string)$this->pole;
  9. }
  10.  
  11. }
  12. $obiekt = new klasa();
  13. var_dump( intval( $obiekt ));
  14.  
  15. ?>

intval nie zadziała.

edited

ale zadziala
  1. <?php
  2.  
  3. var_dump( intval( $obiekt->__toString() ) + 5);
  4.  
  5. ?>


czyli zapewne tez
  1. <?php
  2.  
  3. var_dump( $obiekt->__toString() + 5);
  4.  
  5. ?>


edited 2

jestem conajmniej zawiedziony

Cytat
__toString
The __toString method allows a class to decide how it will react when it is converted to a string.
em1X
Ale przeciez tak juz jest i bylo... W koncu jest to toString. W javie jest zreszta tak samo. Nie mozna miec wszystkiego jak by sie chcialo smile.gif A jezeli juz sie chce, prosze sie zabrac za pisanie wlasnego jezyka lub modyfikowanie zenda winksmiley.jpg
ActivePlayer
po co odkopujesz stere wątki... potraktuj to jako ostrzezenie.
bigZbig
@ActivePlayer - stare nie znaczy nieaktualne, wiec nie rozumiem za co to ostrzezenie? Moim skromnym zdaniem lepiej odkopac stary watek niz stworzyc drugi o tej samej tresci.
ActivePlayer
a co jego post wniosl do tematu ? powiedzial 'tak, tak jest'... zreszta skonczmy ot, jak jeszcze jakies niejasnosci zapraszam na pw.
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.