А как в пхп такое вот коротко записать

Кощей

if(!$needle) die("ooh");
А как в пхп такое вот коротко записать

пример из перла
perl -e 'my ($a, $b) = (0, "Yo"); print $a||$b."\n"'

типа должно быть
echo $a || $b;
если $a не определено то вывести $b

-~{}~ 17.06.08 13:49:

типа нельзя ?
 

mekekebrekeke

Новичок
Re: А как в пхп такое вот коротко записать

Автор оригинала: Кощей
пример из перла
perl -e 'my ($a, $b) = (0, "Yo"); print $a||$b."\n"'

типа должно быть
echo $a || $b;
если $a не определено то вывести $b
вроде так

if ( !isset( $a ) ) echo $b;
else echo $a;
 

Кощей

if(!$needle) die("ooh");
mekekebrekeke
неподход. Условие одна строчка, тчока с запятой приравниваеться к новой строке.

Nicholas
А без дублирования переменной
 

Gas

может по одной?
Кощей
не понятно, тебе шашечки или ехать?
Думаю в перле найдётся немало конструкций, которым нет синтаксических аналогов в php, просто те-же действия делаются по-другому.
и кстати, $a у тебя определено, оно равно нулю.
 

Кощей

if(!$needle) die("ooh");
Gas
0 это false в перле и при сравнении будет идентично неопределенномуесли только если в скобки не взять, тогда будет сравнивать строчно и получиться true :)
 

Кощей

if(!$needle) die("ooh");
Gas
Это точно, не сомневайтесь.
Для php могу привести тогда обьявления для наглядности:
unset($a);
$b = "Yo";
 

Gas

может по одной?
Кощей
я просто обратил внимание, что в лучае $a=0 или false (определено) и $a=null (не определено)
результат конструкции echo isset($a) ? $a : $b; будет разный.
 

Кощей

if(!$needle) die("ooh");
Gas
:)
да это я не уточнил что пример перловый и начальная неопределенная переменная $a в php иная должна быть. 0 он просто для наглядности его может и не быть типа и так сработает в перле:
my $b = "Yo"; print $a||$b; # выведет Yo
но ведь null должен быть идентичен false в конструкторе if() поиде, жаль нет php под рукой чтобы проверить
 

kruglov

Новичок
О, а вы, может, и по фортрану спец? Как мне одной строчкой на перле написать аналог

if(f) 1,2,3

?
 

Gas

может по одной?
Кощей
для php, если переменная может быть не определена и при прочих Ваших условиях, имхо, лучше проверять так:
echo (isset($a) && $a) ? $a : $b;

Ну и вот различные таблички в помощь:
PHP type comparison tables
Comparison Operators
 

Кощей

if(!$needle) die("ooh");
kruglov
Нет фортран не знаю. Но вы раскажите что тут должно быть, я попробую. одной строчкой в перле много чего можно записать :)
 

Gas

может по одной?
точно, empty не ругается на неопределённые переменные.

p.s. а форум таки подтупливает.
 

Кощей

if(!$needle) die("ooh");
crocodile2u
Я просто не хочу два раза писать одну и туже переменную, в чем трабла. Может вы подскажете метод поэстетичней дял данной задачки.
 

StUV

Rotaredom
такими извратами пишется нечитабельный код
сначала один прогер убивает пол-дня на невыразительную, но лаконичную конструкцию
а потом за все время жизни кода все прогеры, включая автора, каждый раз втупляют на несколько секунд (минимум - зависит от опыта) пытаясь понять что же этот код делает
особенно бесит в компилируемых яп - когда в конечном счете насрать на такую оптимизацию

вот в этой книге
http://www.sdteam.com/?tid=251

есть пара замечательных примеров, в которых автору книги хотелось убить авторов подобных "оптимизаций" - когда из-за "лени" кодера написать лишнюю строку кода убиваются часы/дни дебага опытных аудиторов

-~{}~ 17.06.08 15:41:

я понимаю для чего оптимизировать код для программируемых чипов стиральной машины или утюга

но для чего такие оптимизации в пхп - это полный тупняк
если код получается недостаточно производительным - смени ЯП, но ни в коем случае не пиши на пхп в стиле перла - это полный пц
 

Кощей

if(!$needle) die("ooh");
StUV
Ну честно говоря особо в стиле перла и не попишешь, вариаций маловато.
Просто когда принимаеш что-то длинное, очень много места занимает:
$lang = !empty($_SESSION['lang']) ? $_SESSION['lang'] : 'en';
Куда понятней (имхо конечно):
$lang = $_SESSION['lang'] || 'en';
Все такие улучшения в основном направлены и на улучшения читания, таким образом я никогда не пишу в перле чего нибудь типа:
${$$arr[1]}[2]
а напишу так:
$arr->[1]->[2]
 
Сверху