Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wywołujecie instancję klasy?
Forum PHP.pl > Forum > PHP > Object-oriented programming
rejper
Załóżmy, że mam jakiś tam kontroler i jego wywołanie poprzez instancję:

  1. <?php
  2. class Controller
  3. {
  4.  public function getInstance()
  5.  {
  6.      //kod
  7.  }
  8. }
  9.  
  10. $oContr = Controller::getInstance();
  11. ?>


Jak wy to rozwiązaliście? Miałem kod:

  1. <?php
  2. public function getInstance()
  3. {
  4.  if(!self::$oThis instanceof self)
  5.  {
  6.      self::$oThis = new self;
  7.  }
  8.  return self::$oThis;
  9. }
  10. ?>


Ale następnie skróciłem go do chyba już nieskracalnej i najwydajniejszej postaci:

  1. <?php
  2. public function getInstance()
  3. {
  4.  return self::$oSelf instanceof self ? false : self::$oSelf = new self;
  5. }
  6. ?>


W wypadku niepowodzenia przy tworzeniu instancji, skrypt zwraca własny konstruktor.
skowron-line
yyy questionmark.gif singleton smile.gif
http://phpedia.pl/wiki/Singleton
rejper
Wiem co to jest singleton tongue.gif Laikiem nie jestem. Chodziło mi tylko o... jakiś innowacyjny pomysł na to wywołanie, bo wszędzie gdzie patrze w singletonie wali się tylko opisaną tu: http://phpedia.pl/wiki/Singleton konstrukcję

OK. Jedynym działającym skrótem jest:

  1. <?php
  2. public function getInstance()
  3.    {
  4.        !self::$oSelf instanceof self ? self::$oSelf = new self : false;
  5.        return self::$oSelf;
  6.    }
  7. ?>


Innych pomysłów nie mam. Może zwraceć referencję do klasy... Potestuję winksmiley.jpg
dr_bonzo
@rejper: nie masz lepszych zajec niz tylko komPLIKowanie kodu i czynienie go bardziej nieczytelnym. Zapisanie go w 1 linijce NIC ci nie dalo.
rejper
Ekhem.. Ja tam akurat cenię, jak wszystko mam w jednej linijce kodu. Znacznie czytelniejsze od 10 linijek ze zbędnymi if'ami.
Przykład: Temat: Funkcja_Walidacja_W3C 15 linijek kodu.

  1. <?php
  2. function w3cValidate($sAddr){
  3. return ?(strpos(file_get_contents('http://validator.w3.org/check?uri='.$sAddr);, 'successfully checked')!==false)?true:false;
  4. }
  5. ?>
dr_bonzo
No to powodzenia w czytaniu takiego kodu pozniej, po kims innym albo po sobie.
Crozin
W ramach oszczędności proponuję:
  1. <?php
  2. function w3cValidate($a){return strpos(file_get_contents("http://validator.w3.org/check?uri=$a",'successfully checked'))!==false;}
  3. ?>
...
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.