OK, teraz rozumiem co miałeś na myśli.
Tak - odwołanie się do nieistniejącego pola static
rzuci errora.
Ale w takim razie ponawiam pytanie - czy (i dlaczego) lepiej jest dawać !$dupa
albo isset($dupa)
?
Ja osobiście nie używałbym żadnego z nich, z kilku powodów.
-
isset()
po prostu robi za dużo, zbyt dużo jest rzeczy które mogą wpłynąć na jej wynik, przez w gruncie rzeczy to czy isset()
zwróci false
czy true
mówi nam niewiele, nie specjalnie jest to użyteczne, isset()
bierze pod uwagę pola obiektów, atrybuty klas, klucze w array, same zmienne, atrybutu atrybutów też, oraz bierze pod uwagę samą wartość, np null
. Dodatkowo isset()
wycisza wszystkie "nieistniejące" rzeczy, przez co jak napiszesz tam literówkę, to nie dostaniesz żadnego errora.
- Co do
if (!self::$instance)
, tego również nie używam, dlatego że taki zapis najpierw castuje zmienną na bool
(co już w PHP jest powalone, za głowę się można złapać jakie są zasady castowania wartości na bool
- np string "0"
jest castowany na false
. WTF!), a potem go odwraca. Także dla mnie to niej jest w ogóle opcja.
Ja sugeruję w ogóle w PHP nie robić takich rzeczy jak "sprawdzanie, czy coś istnieje w PHP", chyba że nie masz innego wyjścia.
A jeśli już musisz, to użyłbym jednego z tych zapisów:
-
self::$instance === null
- koniecznie ===
, nie ==
-
self::$instance === false
-
array_key_exists($array, 'key')
-
property_exists($object, 'property')
- to jest dobre, bo nawet jeśli property ma null
, to dostaniemy true
(nie tak jak isset()
).
Jeśli chcesz napisać singletona, to ja raczej użyłbym self::$instance === null
. Ale singletona też bym raczej nie używał :D
PS: @cerrato Co do błędów w PHP, to jest trochę bardziej posrane, niż w innych językach. Mamy:
- Parse error -
aplikacja includowany/requireowany/uruchamiany plik nawet się nie włączy
- Fatal error, kiedy się stanie proces PHP się po prostu ubija bez wysłania response'a. Nie da się tego niczym złapać, ani zareagować na to. Fatal to już koniec.
- Exception - to jest jedyna normalna rzecz
- Error, warning, notice - nie różnią się niczym od siebie - to jest taki dziwny mechanizm informowania o błędach, ale nie jest rzetelny, tzn ustawiana jest flaga, którą różne servery ogarniają inaczej (np rethrowują exception, printują błąd w HTML'u lub plaintexcie), i innych rzeczach
- Niektóre błędy są po prostu wyciszane
- Niektóre funkcje zwracają
0
, false
, -1
lub null
jako "sygnał" o błędzie
- Niektóre funkcje się "udają", ale błąd trzeba odczytać inną funkcją, np
preg_last_error()
, json_last_error()
, mysql_error()
, curl_error()
.
Także, z tymi błędami to nie jest takie czarno białe, a dodatkowo - PHP w różny sposób, różną "siłą" reaguje na różne błędy, np:
PHP hehe:
- Użycie nieistniejącego property, np
$user->idd
- warning
- Użycie nieistniejącego consta, np
USER_IDD
- notice
- Użycie propery na czymś, co nie jest obiektem, np
([1,2,3])->property
- notice
- Użycie nieistniejącej zmiennej - notice
- Iterowanie po czymś co nie jest arrayem, np po
integer
- warning
PHP not hehe:
- Użycie niestniejącego
static
a - Fatal error?
- Użycie stringa jako call funkcji - parse error
- Użycie niestniejącej funkcji - fatal error
- Użycie
isset()
(lub echo
, list()
, die()
i innych "konstruktów") jako funkcji - parse error
Wyjątków nie rzuca praktycznie nic w PHP, może oprócz najnowszych feature'ów w PHP.