Co to jest: w PHP 5.3? [duplikat]

Możliwy Duplikat: Jakie są operatory PHP"?"i": "dzwonili i co robią?

Z http://twitto.org/

<?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:

  1. dir stała
  2. The ?: operator
  3. funkcje anonimowe

  1. Co numer 2 robi z ?: w PHP 5.3?

  2. Ponadto, co oni przez anonimowe funkcje? Czy to nie było coś, co istnieje od jakiegoś czasu?

Author: Community, 2010-01-28

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

Z instrukcji :

Od wersji PHP 5.3 można pominąć środkową część operatora warunkowego. Wyrażenie expr1 ?: expr3 zwraca expr1 Jeśli expr1 ocenia na TRUE i expr3 w przeciwnym razie.

 126
Author: Ben James,
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 na expr2 if expr1 ewaluuje na TRUE , a expr3 if expr1 ewaluuje na FALSE .

W przypadku:

expr1 ?: expr2

Wyrażenie jest ewaluowane do wartości expr1 Jeśli expr1jest true i expr2 w przeciwnym razie:

Od wersji PHP 5.3 można pominąć środkową część operatora trójdzielnego. Wyrażenie expr1 ?: expr3 zwraca expr1 Jeśli expr1 ocenia na TRUE i expr3 w przeciwnym razie.

 35
Author: Gumbo,
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

Zobacz tutaj:

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).

 4
Author: Boldewyn,
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