$b = $a+++$a;

12 отговора 434 прегледа
#1

$b = $a+++$a;

Както винаги бях прав

това е равно на три
$a = 1;
$b = $a+++$a;

това е равно на четири
$a = 1;
$b = ++$a+$a;

Това е равно на две
$a = 1;
$b = $a+$a++;

И точно така трябва да си бъде!

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #2

$b = $a+++$a = &c;

Естественно:

Сега смени 1 с 10 и ще получиш нормални резултати - така и трябва да бъде...

Понеже не вдянах по какъв повот пишеш това - да не си прекалил със слънцето?

Отговор
в отговор на БaбaИлиицa #3

Re: $b = $a+++$a;

Ми очевадно. Някой твърди противното ли?

Отговор
в отговор на БaбaИлиицa #4

Re: $b = $a+++$a;

аз така и не разбрах за какво става дума

-----------------------
гърбавия, ковчег ще го изправи
Отговор
в отговор на phpGuru #6

ти пак не разбра: не две, а три!

Не бе Guru... Ти пак много пи и пак не разбра:

$a = ;
$b = $a+++$a;
echo $b;

Ще върне

а не


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #7

Re: $b = $a+++$a;

Ех добре. Аз твърдях, че е 4, щото се чудех дали да си поръчам 4-та бира

Отговор
в отговор на phpGuru #8

Re: аргггхх

да бе,
и на мене тая асоциативност не ми стана много ясна във втория и третия пример

Отговор
в отговор на БaбaИлиицa #9

недей

Силно нежелателно е да се използва инкрементиращ оператор в комбинация с други. Самият Анди Гутманс написа следното:

Like in most other programming languages you can't use post/pre
increment operators on a variable which is used more than once in an
expression. The result is undefined. We won't print out a warning (like
most other languages).


За повече подробности виж това: [линк]

Everything louder than everything else...
Отговор
в отговор на БaбaИлиицa #10

интересна главоблъсканица

аз го преписах това на С++
компилира се без проблеми (то там и менюто от ресторанта се компилира лесно) ама резултата е мааалко по-различен....

int b;
int a = 1;
b = a+++a; // това е 2
a = 1;
b = ++a+a; // това е 4
a = 1;
b = a+a++; // това е 2

разлика има само в първия израз, не знам, кое е по-правилно...на пръв поглед, реших че РНРто се е справило по-добре, но опита ми подсказва, че по-правилно от С++ нема ;-)

в хелпа (не че го четох задълбочено) не видях предупреждения, но ако се отчита това:
It is important to note that a postfix increment or decrement expression evaluates to the value of the expression prior to application of the respective operator. The increment or decrement operation occurs after the operand is evaluated. This issue arises only when the postfix increment or decrement operation occurs in the context of a larger expression.

излиза, че
b = a+++a;
трябва да е точно 2

[линк]
Отговор
в отговор на Topбaлaн #11

tє

А бе недей така, щото аз пък прочетох, че на C всеки път дава различен резултат в зависимост от компилатора, версията, оптимизацията, температурата на въздуха, атмосферното налягане, влажността и редица неизяснени фактори от органичната химия и приложната астрономия!

Просто правилото е инкрементация да не се използва заедно с други опирации, за да няма неочаквани резултати!

БАба...

P.S. но казусът си беше добър- признавам!


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #12

Е те тва как стана?

А бе недей така, щото аз пък прочетох, че на C всеки път дава различен резултат в зависимост от компилатора, версията, оптимизацията, температурата на въздуха, атмосферното налягане, влажността и редица неизяснени фактори от органичната химия и приложната астрономия!

Просто правилото е инкрементация да не се използва заедно с други опирации, за да няма неочаквани резултати!

БАба...

P.S. но казусът си беше добър- признавам!


Ама баба не е жена, вие не знаете ли?
Отговор