Programowanie (PHP, Java...)

PHP i wyjątki

05 grudnia, 2005 o 19:06:21 Dodaj komentarz Poziom: 0 Permalink

Ostatnio jak wsponiałem zajmuję się trochę php. Nie przepadam za tym językiem.

W pythonie mamy taką łatwą konstrukcję(przykład z www.python.org):

  1. class singleton:
  2.     __single = None
  3.     def __init__(self):
  4.         if Singleton.__single:
  5.             raise Singleton.__single
  6.         Singleton.__single = self
  7. try:
  8.     x = new Singleton
  9. except Singleton, s:
  10.     x = s

W javie mamy taki kod (kod z tej strony[1] z modyfikacjami)

  1. public class Singleton {
  2.         private static Singleton instance = NULL;
  3.         private Singleton() {}
  4.         public static Singleton getInstance() {
  5.                 if(instance == NULL)
  6.                         instance = new Singleton();
  7.                 return instance;
  8.         }
  9.         static void Main(String[] args) {
  10.                 Singleton s = Singleton.getInstance();
  11.         }
  12. }

Natomiast w PHP(5, bo w 4 zabezpieczenie nie jest możliwe):

  1. class Singleton {
  2.         private $instance;
  3.         private __construct() {}
  4.         private __clone() {}
  5.         public getInstance() {
  6.                 if(!isset(self::$instance))
  7.                         self::$instance = new Singleton();
  8.                 return self::$instance;
  9.         }
  10. }

W Pythonie mamy ładną konstrukcję opartą o wyjątki. W Javie mamy ostrzerzenie przed pojawiającymi się ni z tąd ni z owąd zmiennymi. A w PHP? Wystarczy, że napiszę

$instance
zamiast
self::$instance
zgodnie z przyzwyczajeń z C++/Java ect.(do których PHP jest podobny składniowo i możnaby oczekiwać, że podobnie działa) i nieszczęście gotowe.

Swoją drogą to ciekawa rzeczy - w językach gdzie jest wielodziedziczenie(C++/Python) można wyżucic cokolwiek, a w jednobazowych(PHP/Java) tylko pochodną Exception(którą można by zastosować tutaj, ale:

  1. Singleton nie jest wyjątkiem
  2. var_dump staje się nieczytelne

[1] Czy w Javie metoda Object.Clone nie jest domyślnie protected?

Komentarze do wpisu

Możesz śledzić odpowiedzi poprzez kanał RSS. Możesz dodać komentarz lub zostawić ślad (trackback) ze swojego bloga.

Jeszcze nie ma żadnych komentarzy. Twój może być pierwszy.

Dodaj komentarz

Textile Lite włączony ( szczegółowy opis znaczników ):