PHP - странен синтаксис


0

Използвам един код, който взех наготово от нета. Локално работи без проблеми но на сървъра като го кача и спря да работи. Установих че парчето код което спъва всичко останало е следния ред

$r[$k] = $v ?: null;

Не съм сигурен дали това е грешен код или някоя нова черта на PHP. Някой би ли ми помогнал да пренапиша този код така че да работи.




Отговори



0

По принцип това е нормален тернарен израз (прост if). Обаче като гледам след въпросителната ти липсва стойност - тоест ако наистина стойностите са ти равни следва че ще взема резултата, който ти е преди ":", който липсва. Иначе би трябва да изглежда така:

If($r[$k] = $v){

тук трябва да имаш някаква стойност в случай на true;

}else{

null;

}


от YavPa (20 точки)


1

Предполагам, че се чупи заради Elvis operator-а (?:), може би сървърът ти работи на PHP < 5.3

Според мен изразът трябва да се пренапише така:

$r[$k] = isset($v) ? $v : null;


от PaperNick (494 точки)


1

Този код асайнва на $r[$k] стойността на $v, ако тя е truelike, и null, ако $v е falselike или не е дефинирана. Работи от PHP 5.3. нагоре.

С пълния синтаксис ще изглежда така:

$r[$k] = $v ? $v : null;

Това ли е резултата, който искаш да получиш?

Работи също както || в javascript:

r[k] = v || null;


от teddyboneva (600 точки)


0
Не съм сигурен какво трябва да се получи, тъй като не разбирам кода, просто го ползвам на готово. Не съм сигурен как, но в момента работи.

от ivan.yosifov (679 точки)