Php рдореЗрдВ, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдЕрдиреЛрдЦрд╛ рдХреНрд░рдоред
$ python -c "print 1 if true else 2 if true else 3 if true else 4 if true else 5 "
1
$ node -e " true ? 1 : true ? 2 : true ? 3 : true ? 4 : 5 "
1
$ perl -e "print true ? 1 : true ? 2 : true ? 3 : true ? 4 : 5 "
1
$ ruby -e "print true ? 1 : true ? 2 : true ? 3 : true ? 4 : 5 "
1
$ php -r "print true ? 1 : true ? 2 : true ? 3 : true ? 4 : 5 ;"
4
рдЬрд╛рд╡рд╛ рдФрд░ рд╕реА ++ рднреА 1 рд▓реМрдЯрд╛рдПрдЧрд╛рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЗрд╕ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд▓ рд╣реА рдореБрдЭреЗ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реНрд░реЛрдд рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛: рд▓реЗрдЦрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдФрд░ рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд▓реЗрдЦ рд╕рд┐рд░реНрдл рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ php рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдПрдХ рдмрдХрд╡рд╛рд╕ рдореЗрдВ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рддрдХрдиреАрдХ рд╢рд░реНрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдЕрдЧрд░-рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
value = isCondFirst() ? valueFirst() : isCondSecond() ? valueSecond() : isCondThird() ? valueThird() : valueDefault(); if (isCondFirst()) { value = valueFirst(); } else if (isCondSecond()) { value = valueSecond(); } else if (isCondThird()) { value = valueThird(); } else { value = valueDefault(); }
рдЧрд▓рддреА рд╕реЗ рдХреИрд╕реЗ рдмрдЪреЗрдВ?
рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ php рдореЗрдВ ternary рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред
рджреВрд╕рд░рд╛ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрджреЗрд╢ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реИ:
$ php -r "print true ? 1 : ( true ? 2 : ( true ? 3 : ( true ? 4 : 5 )));"
1
рдХреБрдЫ рд▓рд┐рд╕реНрдк рдХреА рдпрд╛рдж рддрд╛рдЬрд╛ рдХрд░рддреА рд╣реИ, рд╣реИ рдирд╛?
рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ?
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдо PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯрд░реНрдиреЗрд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреНрд░рдо рдХреЛ рджреЗрдЦреЗрдВ
рд╣рдо рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рд╕рдордЭрд╛рддрд╛ $foo = $lambda('fooMsg', 'fooReturn')
рдХрд┐ $foo = $lambda('fooMsg', 'fooReturn')
, $foo
рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ 'fooMsg'
рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдорд╛рди 'fooReturn'
$ cat ternary. js
var lambda = function (logMsg, returnValue) { return function () { console.log(logMsg); return returnValue; }; }; var cond = { first : lambda('cond.first' , true), second: lambda('cond.second', true), third : lambda('cond.third' , true) }; var value = { first : lambda('value.first' , 'first'), second : lambda('value.second' , 'second'), third : lambda('value.third' , 'third'), default: lambda('value.default', 'default') }; console.log( 'result: ', cond.first() ? value.first() : cond.second() ? value.second() : cond.third() ? value.third() : value.default() );
$ node ternary. js
cond.first
value.first
result: first
$ cat ternary. php
<?php $lambda = function ($logMsg, $returnValue) { return function () use ($logMsg, $returnValue) { echo $logMsg . PHP_EOL; return $returnValue; }; }; $cond = array( 'first' => $lambda('cond.first' , true), 'second'=> $lambda('cond.second', true), 'third' => $lambda('cond.third' , true), ); $value = array( 'first' => $lambda('value.first' , 'first'), 'second' => $lambda('value.second' , 'second'), 'third' => $lambda('value.third' , 'third'), 'default'=> $lambda('value.default', 'default'), ); echo 'result: ' . ( $cond['first']() ? $value['first']() : $cond['second']() ? $value['second']() : $cond['third']() ? $value['third']() : $value['default']() ) . PHP_EOL; ?>
$ php ternary. php
cond.first
value.first
value.second
value.third
result: third
рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд╛рд░реНрдиреЗрд░реА рдСрдкрд░реЗрдЯрд░ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдмрд╛рдИрдВ рдУрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдЪ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдмрд╛рдж рдмрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд╣реАред
(cond.first() ? value.first() : (cond.second() ? value.second() : (cond.third() ? value.third() : (value.default())))); true ? 'value.first' : ;
PHP рдореВрд▓ рд╕реЛрдЪрддрд╛ рд╣реИред
( ( cond.first() ? value.first() : cond.second() ) ? value.second() : cond.third() ) ? value.third() : value.default(); ( ( 'value.first' ) ? value.second() : cond.third() ) ? value.third() : value.default(); ( 'value.second' ) ? value.third() : value.default(); 'value.third'
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдХреНрдпрд╛ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИ:
$a = true ? 0 : true ? 1 : 2;
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, PHP рдиреЗ рдЦреБрдж рдХреЛ "рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рдл рд╕реЗ" рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдЧрдВрднреАрд░ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдФрд░ PHP рдореЗрдВ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред