Co to jest: w PHP 5.3? [duplikat]
Możliwy Duplikat: Jakie są operatory PHP"?"i": "dzwonili i co robią?
<?PHP
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
throw new Exception('Error');
$c();
?>
Twitto wykorzystuje kilka nowych funkcji dostępnych od wersji PHP 5.3:
- dir stała
- The ?: operator
- funkcje anonimowe
Co numer 2 robi z ?: w PHP 5.3?
Ponadto, co oni przez anonimowe funkcje? Czy to nie było coś, co istnieje od jakiegoś czasu?
3 answers
?:
jest formą operatora warunkowego, który wcześniej był dostępny tylko jako:
expr ? val_if_true : val_if_false
W 5.3 można pominąć część środkową, np. {[3] } co jest równoważne:
expr ? expr : val_if_false
Od wersji PHP 5.3 można pominąć środkową część operatora warunkowego. Wyrażenie
expr1 ?: expr3
zwracaexpr1
Jeśliexpr1
ocenia naTRUE
iexpr3
w przeciwnym razie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-30 17:01:09
Operator ?:
jest operatorem warunkowym (często określany jako operator trójdzielny):
Wyrażenie
(expr1) ? (expr2) : (expr3)
ewaluuje naexpr2
ifexpr1
ewaluuje na TRUE , aexpr3
ifexpr1
ewaluuje na FALSE .
W przypadku:
expr1 ?: expr2
Wyrażenie jest ewaluowane do wartości expr1
Jeśli expr1
jest true i expr2
w przeciwnym razie:
Od wersji PHP 5.3 można pominąć środkową część operatora trójdzielnego. Wyrażenie
expr1 ?: expr3
zwracaexpr1
Jeśliexpr1
ocenia na TRUE iexpr3
w przeciwnym razie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-30 18:30:35
Od wersji PHP 5.3 można pominąć środkową część operatora trójdzielnego. Expression expr1 ?: expr3 zwraca expr1 jeśli expr1 jest obliczone na TRUE, a expr3 w przeciwnym razie.
funkcje anonimowe: Nie, Nie istniały przed 5.3.0 (patrz pierwsza uwaga poniżej przykładów), przynajmniej w ten sposób:
function ($arg) { /* func body */ }
Jedynym sposobem było create_function()
, które jest wolniejsze, dość uciążliwe i podatne na błędy (ze względu na używanie ciągów dla definicji funkcji).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-28 09:14:50