PHP i wyjątki
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):
- class singleton:
- __single = None
- def __init__(self):
- if Singleton.__single:
- raise Singleton.__single
- Singleton.__single = self
- try:
- x = new Singleton
- except Singleton, s:
- x = s
W javie mamy taki kod (kod z tej strony[1] z modyfikacjami)
- public class Singleton {
- private static Singleton instance = NULL;
- private Singleton() {}
- public static Singleton getInstance() {
- if(instance == NULL)
- instance = new Singleton();
- return instance;
- }
- Singleton s = Singleton.getInstance();
- }
- }
Natomiast w PHP(5, bo w 4 zabezpieczenie nie jest możliwe):
- class Singleton {
- private $instance;
- private __construct() {}
- private __clone() {}
- public getInstance() {
- self::$instance = new Singleton();
- return self::$instance;
- }
- }
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::$instancezgodnie 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:
- Singleton nie jest wyjątkiem
var_dumpstaje 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