2012-10-05 13 views
6

Possible Duplicate:
PHP: 'or' statement on instruction fail: how to throw a new exception?PHP funkcja starej szkoły „lub” z wyjątkiem

W PHP, szczególnie popularny wśród początkujących w różnych tutoriali połączeń MySQL, zawsze byłaś w stanie zrobić coś takiego ...

<?php 
foo() or die('foo() failed!'); 
?> 

jednak gdy próbuję coś takiego się nie powiedzie ...

<?php 
foo() or throw new Exception('AHH!'); 
?> 

podobnie jak ...

"Parse error: syntax error, unexpected 'throw' (T_THROW) in..."

Ktoś wie, jak zrobić coś podobnego do tego? Czy muszę ustawić zmienną po "lub"?

+1

Można zdefiniować 'throwException()' funkcja, która po prostu zgłasza wyjątek. – Wiseguy

+0

Dziękuję wszystkim za odpowiedzi. – PolishHurricane

Odpowiedz

10

zrobić to mniej „sprytny” sposób:

if(!foo()) { 
    throw new Exception('AHH!'); 
} 

W przypadku, gdy zastanawiasz się, dlaczego or throw new Exception() nie działa, to dlatego, że jesteś powołując się na short-circuiting z or operator: Jeśli pierwszy argument to prawda, to nie ma potrzeby, aby ocenić drugi, aby określić, czy jeden z nich jest prawdziwy (skoro już wiesz, że jeden z nich jest co najmniej).

Nie można tego zrobić z throw, ponieważ jest to wyrażenie, które nie zwraca wartości boolowskiej (lub dowolnej wartości), więc nie ma sensu.

Jeśli chcesz to zrobić, skasowana odpowiedź @emie powinna działać (wykonać funkcję, która właśnie zgłasza wyjątek), ponieważ nawet funkcja bez wartości zwracanej jest poprawna w instrukcji boolowskiej, ale Wydaje się, że to zły pomysł, aby utworzyć taką funkcję, aby można było tworzyć sprytne rzeczy za pomocą instrukcji boolowskich.

+2

Właściwie to nie działa, ponieważ 'throw', podobnie jak' echo', 'include', itp. Jest konstruktem językowym, a nie funkcją :) –

+0

Tak, próbowałem uniknąć instrukcji IF. Tak przydatne, dzięki chłopaki. – PolishHurricane