Portrety Uliczne Nieznajomych - zobacz wyjątkową galerię portretów z warszawskich ulic
ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Google Plus
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 71
W CZYM MOGĘ POMÓC?


   
OPINIE UŻYTKOWNIKÓW
Przyznam, że jestem pod sporym wrażeniem. Od wielu lat zajmuje się grafiką przeznaczoną do druku ze szczególnym uwzględnieniem opakowań. Z radością stwierdzam, iż twórca serwisu jest moim ulubionym typem potencjalnego współpracownika (choć branża troszeczkę inna) tzn. pada pytanie i błyskawicznie pada konkretna odpowiedź bez względu na stopień skomplikowania pytania. Gorąco polecam współpracę, gdyż macie pewność że nie zostaniecie potraktowani sloganami typu "oczywiście", "nie ma sprawy" tylko otrzymacie konkretną pomoc. Tak trzymać! Na pewno jeszcze nie raz skorzystam

Paweł
Studio Gama

   
GALERIA FOTOGRAFII
   
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net

[Spis] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [X] [W] [Z]

Rozdział 15. Operatory

Priorytety operatorów

Priorytet operatora określa, jak "silnie" operator wiąże ze sobą dwa stojące obok niego wyrażenia. Na przykład, w wyrażeniu 1 + 5 * 3, wynik wynosi 16, nie 18 ponieważ operator mnożenia ("*") ma wyższy priorytet niż operator dodawania ("+"). Za pomocą nawiasów można zmieniać priorytet działań według reguł arytmetyki. Na przykład: (1 + 5) * 3 jest równe 18.

Poniższa tabela zawiera priorytet operatorów, od najniższego priorytetu na górze.

Tabela 15-1. Priorytety operatorów

PowiązanieOperator
lewe,
leweor
lewexor
leweand
praweprint
lewe = += -= *= /= .= %= &= |= ^= ~= <<= >>=
lewe? :
lewe||
lewe&&
lewe|
lewe^
lewe&
bez powiązania== != === !==
bez powiązania< <= > >=
lewe<< >>
lewe+ - .
lewe* / %
prawe! ~ ++ -- (int) (double) (string) (array) (object) @
prawe[
bez powiązanianew




User Contributed Notes

dlyons at lyons42 dot com
26-Nov-2005 12:30

Re: Rick on 2-Sep-2005.

Actually, the C equivalent of "$a[$c++]=$b[$c++];" has undefined behavior, and the increments are by no means guaranteed to happen after the assignment in C.  (Search for a discussion of C "sequence points" for details.)


sm
02-Sep-2005 02:15

Note the highly unfortunate difference from Java, which associates the trinary operator right-to-left.

---------------------------- source

function trinaryTest($foo){  // works as you think in Java, but not PHP

   $bar    = $foo > 20
           ? "greater than 20"
           : $foo > 10
               ? "greater than 10"
               : $foo > 5
                   ? "greater than 5"
                   : "not worthy of consideration";   
   echo $foo." =>  ".$bar."\n";
}

echo "\n\n\n----trinaryTest\n\n";
trinaryTest(21);
trinaryTest(11);
trinaryTest(6);
trinaryTest(4);

function trinaryTestParens($foo){
  
   $bar    = $foo > 20
           ? "greater than 20"
           : ($foo > 10
               ? "greater than 10"
               : ($foo > 5
                   ? "greater than 5"
                   : "not worthy of consideration"));   
   echo $foo." =>  ".$bar."\n";
}

echo "\n\n\n----trinaryTestParens\n\n";
trinaryTestParens(21);
trinaryTestParens(11);
trinaryTest(6);
trinaryTestParens(4);

---------------------------- output
----trinaryTest

21 =>  greater than 5
11 =>  greater than 5
6 =>  greater than 5
4 =>  not worthy of consideration

----trinaryTestParens

21 =>  greater than 20
11 =>  greater than 10
6 =>  greater than 5
4 =>  not worthy of consideration


rick at nomorespam dot fourfront dot ltd dot uk
02-Sep-2005 12:51

A quick note to any C developers out there, assignment expressions are not interpreted as you may expect - take the following code ;-

<?php
$a
=array(1,2,3);
$b=array(4,5,6);
$c=1;

$a[$c++]=$b[$c++];

print_r( $a ) ;
?>

This will output;-
Array ( [0] => 1 [1] => 6 [2] => 3 )
as if the code said;-
$a[1]=$b[2];

Under a C compiler the result is;-
Array ( [0] => 1 [1] => 5 [2] => 3 )
as if the code said;-
$a[1]=$b[1];

It would appear that in php the increment in the left side of the assignment is processed prior to processing the right side of the assignment, whereas in C, neither increment occurs until after the assignment.


kit dot lester at lycos dot co dot uk
22-Aug-2005 02:38

D'oh! please ignore (& forgive) the first paragraph in my note yesterday - I said that a diadic operator had the same precedence & associativity as a bunch of monadics. A bit of early senility must have struck me.

When I find time I'll rework my test to find out what I should have said - but using instanceof monadically didn't cause any visible errors in the test, so it could take a while.

[I'd be delighted if someone else beats me to it/ spares me the difficulties of seeing what's wrong in something that shouldn't have worked.]


kit dot lester at lycos do co dot uk
21-Aug-2005 06:21

Table 15-1 omits the precedence of instanceof - testing suggests it to be of the same precedence as not, negate, casting, and @.

The table also omits the precedence (and associativity) of the "execution operator" - but since that's a sort of quoting, I don't think it meaningfully has a precedence or associativity - they explain what is to happen where there's an open-endedness in the sense of missing brackets, and the quoting is a sort of bracket. (At least: because of the execution operator's double-ended closedness, I can't figure out any code where it would matter, so I can't test it.)


webmaster AT cafe-clope DOT net
12-Aug-2005 09:47

I regularly use some syntax like :

<?php
if(!$myvar)
 
$myvar = $value ;
?>

and

<?php
if($myvar)
  echo
"myvar is $myvar today" ;
?>

(or <?php echo ($myvar ? "myvar is $myvar today" : "") ?>)

It's small, but can become heavy when used too much.
Isn't there some trick to better such syntaxes ?
I was wondering about using things like :

<?php $myvar ||= $value ; ?>
<?php $myvar
?= $value ; ?>
<?php
echo ($myvar ? "myvar is $myvar today") ; ?>


edwardsbc at yahoo dot com
04-May-2005 07:26

In response to npeelman at cfl dot rr dot com
29-Dec-2004 06:22:

You have misunderstood the behaviour of the interpreter.

With out the curly braces and the single quoted key identifier, the interpreter "assumes" you meant your CONSTANT to be a string.  This ONLY works within a parsed (double quoted) string.  And it doesn't help you at all if your array is multi-dimensional. I consider this a very bad habbit because it will get you in trouble elsewhere. Try the following:

<?php
define
('item','AnyOldThing');
define('b',12);

$arr['item']['b'] = 'string';
$arr['AnyOldThing'][12]= 'Maybe not what I intended.';

echo
"This is a {$arr['item']['b']}"; // [1] prints "This is a string".
echo "This is a $arr[item][b]"; // [2] broken
echo $arr[item][b]; // [3] broken
?>


npeelman at cfl dot rr dot com
29-Dec-2004 12:22

Update to message by yasuo_ohgaki at hotmail dot com:

  I know this is an old message but when using an Associative array in a string you do not have to use { and  } to resolve ambiguity.

ex:

Associative Array in string:

$arr['item'] = 'string';

echo "This is {$arr['item']}"; //prints "This is string".

...does work but, so does:

echo "This is $arr[item]"; //prints "This is string".

... simply enclose the whole string with double quotes and leave out the single quotes from around the index name. This simplifies the code and makes things easier to read.


Stopping at the dot completely
01-Sep-2004 10:33

The low precedence of the OR operator is useful for error control statements such as this one:
$my_file = @file ('non_existent_file') or die ("Failed opening file: error was '$php_errormsg'");

Notice the good readability of the code.


22-Aug-2004 06:51

I think warhog's note about the differing precedence between && / AND and || / OR is worth repeating.  Since && and || evaluate before the assignment operator (=) while AND and OR evaluate after it, you can get COMPLETELY different results if you don't fully parenthesise.

I cannot imagine when it would ever be important that those two pairs have differing precedence, but they do.  And I just spent two hours discovering that the hard way because I broke my career-long rule:

*Always fully parenthesise!*


11-Jun-2004 04:22

Warhog wrote: "maybe usefull for some tricky coding and helpfull to prevent bugs :D"

I'm sure Warhog was being facetious, but for the new programmers in the audience I'd like to point out that 'tricky coding' and relying on precedence/order of evaluation are both well-known ways to *produce* bugs.

Use parentheses instead.


10-Jun-2004 02:58

of course this should be clear, but i think it has to be mentioned espacially:

AND is not the same like &&

for example:

<?php $a && $b || $c; ?>
is not the same like
<?php $a AND $b || $c; ?>

the first thing is
(a and b) or c

the second
a and (b or c)

'cause || has got a higher priority than and, but less than &&

of course, using always [ && and || ] or [ AND and OR ] would be okay, but than you should at least respect the following:

<?php $a = $b && $c; ?>
<?php $a
= $b AND $c; ?>

the first code will set $a to the result of the comparison $b with $c, both have to be true, while the second code line will set $a like $b and THAN - after that - compare the success of this with the value of $c

maybe usefull for some tricky coding and helpfull to prevent bugs :D

greetz, Warhog


yasuo_ohgaki at hotmail dot com
26-Mar-2001 10:34

About "{" and "}".
Sometimes PHP programmers need to use "{" and "}" to resolve ambiguity. Here is some examples.

Variable Variables:

$foo = "test";
$$bar = "this is";

echo "${$bar} $foo"; // prints "this is test"
Note: it is the same as
echo "$test $foo";

Array in string:

$arr[10][10][10] = "string";

echo "This is {$arr[10][10][10]}"; // prints "This is string"

Associative Array in string:

$arr['item'] = 'string';

echo "This is {$arr['item']}"; //prints "This is string".


yasuo_ohgaki at hotmail dot com
26-Mar-2001 09:53

Other Language books' operator precedence section usually include "(" and ")" - with exception of a Perl book that I have. (In PHP "{" and "}" should also be considered also). However, PHP Manual is not listed "(" and ")" in precedence list. It looks like "(" and ")" has higher precedence as it should be.

Note: If you write following code, you would need "()" to get expected value.

$bar = true;
$str = "TEST". ($bar ? 'true' : 'false') ."TEST";

Without "(" and ")" you will get only "true" in $str.
(PHP4.0.4pl1/Apache DSO/Linux, PHP4.0.5RC1/Apache DSO/W2K Server)
It's due to precedence, probably.


 

 
  © 1996-2012 & Reporter.plmiejscao serwisieabonamentwarunki korzystaniaRSSkontakt