Откуда взялся этот экскаватор?

tristram

Guest
Откуда взялся этот экскаватор?

PHP:
function myfunc() {return 31337;}
$s = myfunc();
echo  $s > 0?$s:0;
// 31337
вуаля:
PHP:
function myfunc() {return 31337;}
echo $s = myfunc() > 0?$s:0;
// !^(.*)$!i
Software: Apache/1.3.33 (Win32) PHP/5.0.4

Наткнулся случайно при попытке сделать в одну строчку условие без повторного обращения к myfunc(). Выдает регулярное выражение непонятно откуда. Это считается за баг?
 

Paxan

Новичёк
tristram
Курим порядок выполнения операций, функция выполняется позднее, если не поставить скобки.
 

jdoe

Новичок
если расставить скобки в соответствие с приоритетами, получим

$s = ((myfunc() > 0) ? $s : 0);

а теперь ищи свою регулярку в том месте, где ты в последний раз использовал переменную $s. :)

UPD опоздал =)
 

Paxan

Новичёк
tristram
Ищи выше, где ты там $s присваил свою регулярку.
 

tristram

Guest
нигде не присваивал. в этом весь прикол. чудеса какие-то.
UPD что вы понимаете под словом правильно расставить? для решения задачи той я поставил скобки. а когда игрался то не ставил.
 

Paxan

Новичёк
tristram
На что спорим что присваивал?
сделай:
PHP:
<?php
function myfunc() {return 31337;} 
echo $s = myfunc() > 0?$s:0; 
?>
и получишь notice - undefined variable
 

jdoe

Новичок
>что вы понимаете под словом правильно расставить

поставить их так, чтобы это ничего не меняло. для наглядности.

короче напиши ВЫШЕ echo $s и не парь честным людям мозг. =)
 

tristram

Guest
Paxan
извиняюсь ;) надо спать больше мне. а через 1.5 часа отчаливать. в общем это служебная переменная "дебаггера". я его сейчас крою пятиэтажным матом.
 

berkut

Новичок
у меня под 4.3.10 и 5.0.4
function myfunc() {return 31337;}
var_dump($s = myfunc() > 0?$s:0);
выдаёт NULL
 

tristram

Guest
berkut
так и должно быть просто я не принял в расчет переменные дурацкой оболочки.
 

Gorath

Новичок
Оболочка действительно дурацкая, раз такое в GLOBALS хранит..
 

tristram

Guest
переделал теперь в отдельную функцию исполнение кода чтобы таких косяков обидных не было.
 
Сверху