You are on page 1of 20

Reference - What does this symbol mean in PHP?

Ask Question
What is this?

This is a collection of questions that come up every now and then about syntax in PHP. This is also a
Community Wiki, so everyone is invited to participate in maintaining this list.

Why is this?

It used to be hard to find questions about operators and other syntax tokens.¹
The main idea is to have links to existing questions on Stack Overflow, so it's easier for us to reference
them, not to copy over content from the PHP Manual.

¹ Note: Since January 2013, Stack Overflow does support special characters. Just surround the search
terms by quotes, e.g. [php] "==" vs "==="

What should I do here?

If you have been pointed here by someone because you have asked such a question, please find the
particular syntax below. The linked pages to the PHP manual along with the linked questions will likely
answer your question then. If so, you are encouraged to upvote the answer. This list is not meant as a
substitute to the help others provided.

The List
If your particular token is not listed below, you might find it in the List of Parser Tokens.

& Bitwise Operators or References

 What does it mean to start a PHP function with an ampersand?


 Understanding PHP & (ampersand, bitwise and) operator
 PHP "&" operator
 Difference between & and && in PHP
 What does "&" mean here in PHP?
 What does "&" mean in this case?
 What does the "&" sign mean in PHP?
 What does this signature mean (&) in PHP?
 How does the "&" operator work in a PHP function?
 What does & in &2 mean in PHP?
 When should I use a bitwise operator?
 Is there ever a need to use ampersand in front of an object?
=& References

 Reference assignment operator in PHP, =&


 What do the "=&" and "&=" operators in PHP mean?
 What do the '&=' and '=&' operators do?
 What does =& mean in PHP?

&= Bitwise Operators

 What do the "=&" and "&=" operators in PHP mean?


 What do the '&=' and '=&' operators do?

&& Logical Operators

 'AND' vs '&&' as operator


 Difference between & and && in PHP
 Is there a difference between PHP operators AND and && for this code?
 PHP - and / or keywords

% Arithmetic Operators

 What does the percent sign mean in PHP?


 What is the PHP operator % and how do I use it in real-world examples?

!! Logical Operators

 Double not (!!) operator in PHP

@ Error Control Operators

 What is the use of the @ symbol in PHP?


 'At' symbol before variable name in PHP: @$_POST
 PHP functions and @functions
 Should I use @ in my PHP code?

?: Ternary Operator
 What is ?: in PHP 5.3?
 What are the PHP operators "?" and ":" called and what do they do?
 ?: operator (the 'Elvis operator') in PHP
 Where can I read about conditionals done with "?" and ":" (colon)?
 Using PHP 5.3 ?: operator

?? Null Coalesce Operator (since PHP 7)

 C#'s null coalescing operator (??) in PHP?

: Alternative syntax for control structures, Ternary Operator

 What is ":" in PHP?


 What does ":" mean in PHP?

:: Scope Resolution Operator

 What do two colons mean in PHP?


 What's the meaning of the PHP token name T_PAAMAYIM_NEKUDOTAYIM?
 What's the difference between :: (double colon) and -> (arrow) in PHP?
 What exactly are late static bindings in PHP?
 static::staticFunctionName()
 Unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting T_NS_Separator

\ Namespaces

 Backslash in PHP -- what does it mean?


 What does a \ (backslash) do in PHP (5.3+)?

-> Classes And Objects

 What is the "->" PHP operator called and how do you say it when reading code out loud?
 Where do we use the object operator "->" in PHP?
 What's the difference between :: (double colon) and -> (arrow) in PHP?
 What does the PHP syntax $var1->$var2 mean?
 What does "->" mean/refer to in PHP?
=> Arrays

 What does "=>" mean in PHP?


 Use of => in PHP
 What does $k => $v in foreach($ex as $k=>$v) mean?

^ Bitwise Operators

 How does the bitwise operator XOR ('^') work?


 What does ^ mean in PHP?

>> Bitwise Operators

 What does >> mean in PHP?

<< Bitwise Operators

 Strange print behaviour in PHP?

<<< Heredoc or Nowdoc

 What does <<<END mean in PHP?


 PHP expression <<<EOB
 In PHP, what does "<<<" represent?
 Using <<<CON in PHP
 What's this kind of syntax in PHP?

= Assignment Operators

 The 3 different equals

== Comparison Operators

 How do the PHP equality (== double equals) and identity (=== triple equals) comparison
operators differ?
 PHP != and == operators
 The 3 different equals
 Type-juggling and (strict) greater/lesser-than comparisons in PHP

=== Comparison Operators

 What does "===" mean?


 How do the PHP equality (== double equals) and identity (=== triple equals) comparison
operators differ?
 The 3 different equals
 Type-juggling and (strict) greater/lesser-than comparisons in PHP

!== Comparison Operators

 What does !== comparison operator in PHP mean?


 Is there a difference between !== and != in PHP?

!= Comparison Operators

 PHP != and == operators


 Is there a difference between !== and != in PHP?
 comparing, !== versus !=
 What is the difference between <> and !=

<> Comparison Operators

 PHP operator <>


 PHP's <> operator
 What is the difference between <> and !=
 Type-juggling and (strict) greater/lesser-than comparisons in PHP

<=> Comparison Operators (since PHP 7.0)

 Spaceship (three way comparison) operator

| Bitwise Operators

 What is the difference between the | and || operators?


 What Does Using A Single Pipe '|' In A Function Argument Do?
|| Logical Operators

 What is the difference between the | and || operators?


 PHP - and / or keywords
 What exactly does || mean?
 The behaviour of the or operator in PHP

~ Bitwise Operators

 What does this ~ operator mean here?

+ Arithmetic Operators, Array Operators

 + operator for array in PHP?

+= and -= Assignment Operators

 What is += used for?


 What does `$page -= 1` in my PHP document mean?

++ and -- Incrementing/Decrementing Operators

 Understanding Incrementing
 Answer below

.= Assignment Operators

 What is the difference between .= and += in PHP?


 To understand a line of PHP

. String Operators

 Difference between period and comma?


 What does a . (dot) do in PHP?
, Function Arguments

 Difference between period and comma?

, Variable Declarations

 What do commas mean in a variable declaration?

$$ Variable Variables

 What does $$ (dollar dollar or double dollar) mean in PHP?


 what is "$$" in PHP
 $function() and $$variable

` Execution Operator

 What are the backticks `` called?

<?= Short Open Tags

 What does this symbol mean in PHP <?=


 What does '<?=' mean in PHP?
 What does <?= mean?

[] Arrays (since PHP 5.4)

 PHP arrays... What is/are the meaning(s) of an empty bracket?


 PHP : What is the meaning of []
 Php array_push() vs myArray[]
 What does [] mean when reading from a PHP array?
 Shorthand for arrays: literal $var = [] empty array

# One-line shell-style comment

 Can I use hashes for comments in PHP?

php operators symbols

I know this isn't strictly PHP, but what about including a link to phpdoc.org for phpDocumentor
4  Can I suggest square bracket and curly bracket ? – ajreal Nov 26 '11 at 10:38
I ran into this problem a lot too (not being able to search for special characters), which is why I
89   made SymbolHound, a search engine that doesn't ignore special characters. I also posted it on
StackApps. – dncrane Dec 6 '11 at 18:34
A question was asked today (Nov.20/15) stackoverflow.com/questions/33833259/what-is-rscat-
in-php asking "What is $rsCat in php" (should that question still be made visible and not deleted).

Strangely enough, there isn't a reference about $ variable, but about $$ Variable Variables only. I
believe that should be amended somewhere. – Fred -ii- Nov 20 '15 at 18:19
Suggestion: move this to the new Stackoverflow documentation. – starbeamrainbowlabs Oct 5 '16

at 9:16
show 9 more comments

14 Answers
active oldest votes
Incrementing / Decrementing Operators

++ increment operator

-- decrement operator

Example Name Effect


---------------------------------------------------------------------
++$a Pre-increment Increments $a by one, then returns $a.
$a++ Post-increment Returns $a, then increments $a by one.
--$a Pre-decrement Decrements $a by one, then returns $a.
$a-- Post-decrement Returns $a, then decrements $a by one.

These can go before or after the variable.

If put before the variable, the increment/decrement operation is done to the variable first then the result is
returned. If put after the variable, the variable is first returned, then the increment/decrement operation is done.

For example:

$apples = 10;
for ($i = 0; $i < 10; ++$i) {
echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}

Live example

In the case above ++$i is used, since it is faster. $i++ would have the same results.

Pre-increment is a little bit faster, because it really increments the variable and after that 'returns' the result. Post-
increment creates a special variable, copies there the value of the first variable and only after the first variable is
used, replaces its value with second's.

However, you must use $apples--, since first you want to display the current number of apples, and then you
want to subtract one from it.
You can also increment letters in PHP:

$i = "a";
while ($i < "c") {
echo $i++;
}

Once z is reached aa is next, and so on.

Note that character variables can be incremented but not decremented and even so only plain ASCII characters
(a-z and A-Z) are supported.

Stack Overflow Posts:

 Understanding Incrementing

The difference is a lot more than just speed... consider $x = 0; $y = $x++; compared with $x = 0; $y = +

+$x; and the value of $y in each case – Mark Baker Sep 17 '10 at 16:33
+1 for the note that decrementers don't work on characters, only on numbers – Mark Baker Sep 17 '10 at

20:51
For everyone's sake, please remove the bolded information about pre-incrementing being infinitesimally
129   faster. This is the absolute worst example of premature optimization and this kind of information should
not be in people's heads if they are just starting to learn PHP. – Lotus Notes Dec 8 '10 at 23:49
@Lotus - I consider it a fun fact. If you're a beginner to PHP, or C++, etc, it seems pretty wacky that ++i
10   and i++ are different enough to work at different speeds. I found it fascinating. – Peter Ajtai Dec 9 '10 at
10:47
@Peter Ajtai Yes, it's interesting, but from the way you've structured your post you make it seem like
8  one of the prime facts of PHP that is absolutely vital to using the language. – Lotus Notes Dec 9 '10 at
17:43
show 7 more comments
_ Alias for gettext()

The underscore character '_' as in _() is an alias to gettext().

add a comment
syntax name description
x == y Equality True if x and y have the same key/value pairs
x != y Inequality True if x is not equal to y
x === y Identity True if x and y have the same key/value pairs in
the same order and of the same types
x !== y Non-identity True if x is not identical to y
++ x Pre-increment Increments x by one, then returns x
x ++ Post-increment Returns x, then increments x by one
-- x Pre-decrement Decrements x by one, then returns x
x -- Post-decrement Returns x, then decrements x by one
x and y And True if both x and y are true x=6 y=3
(x < 10 and y > 1) returns true
x && y And True if both x and y are true x=6 y=3
(x < 10 && y > 1) returns true
a . b Concatenation Concatenate two strings: "Hi" . "Ha"

add a comment
Magic constants: Although these are not just symbols but important part of this token family. There are eight
magical constants that change depending on where they are used.

__LINE__: The current line number of the file.

__FILE__: The full path and filename of the file. If used inside an include, the name of the included file is
returned. Since PHP 4.0.2, __FILE__ always contains an absolute path with symlinks resolved whereas in older
versions it contained relative path under some circumstances.

__DIR__: The directory of the file. If used inside an include, the directory of the included file is returned. This
is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root
directory. (Added in PHP 5.3.0.)

__FUNCTION__: The function name. (Added in PHP 4.3.0) As of PHP 5 this constant returns the function name
as it was declared (case-sensitive). In PHP 4 its value is always lowercased.

__CLASS__: The class name. (Added in PHP 4.3.0) As of PHP 5 this constant returns the class name as it was
declared (case-sensitive). In PHP 4 its value is always lowercased. The class name includes the namespace it
was declared in (e.g. Foo\Bar). Note that as of PHP 5.4 __CLASS__ works also in traits. When used in a trait
method, __CLASS__ is the name of the class the trait is used in.

__TRAIT__: The trait name. (Added in PHP 5.4.0) As of PHP 5.4 this constant returns the trait as it was
declared (case-sensitive). The trait name includes the namespace it was declared in (e.g. Foo\Bar).

__METHOD__: The class method name. (Added in PHP 5.0.0) The method name is returned as it was declared
(case-sensitive).

__NAMESPACE__: The name of the current namespace (case-sensitive). This constant is defined in compile-time
(Added in PHP 5.3.0).

Source

community wiki
shareimprove this answer edited Feb 21 '14 at 0:42
2 revs, 2 users 66%
n.1
add a comment

<=> Spaceship Operator


Added in PHP 7

The spaceship operator <=> is the latest comparison operator added in PHP 7. It is a non-associative binary
operator with the same precedence as equality operators (==, !=, ===, !==). This operator allows for simpler
three-way comparison between left-hand and right-hand operands.

The operator results in an integer expression of:

 0when both operands are equal


 Less than 0 when the left-hand operand is less than the right-hand operand
 Greater than 0 when the left-hand operand is greater than the right-hand operand

e.g.

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

A good practical application of using this operator would be in comparison type callbacks that are expected to
return a zero, negative, or positive integer based on a three-way comparison between two values. The
comparison function passed to usort is one such example.

Before PHP 7 you would write...


$arr = [4,2,1,3];

usort($arr, function ($a, $b) {


if ($a < $b) {
return -1;
} elseif ($a > $b) {
return 1;
} else {
return 0;
}
});

Since PHP 7 you can write...


$arr = [4,2,1,3];

usort($arr, function ($a, $b) {


return $a <=> $b;
});
community wiki
shareimprove this answer edited Jan 20 '16 at 22:47
7 revs, 3 users 83%
Sherif
11   Not sure how $a <=> $b is different to $a - $b – rev Aug 28 '15 at 17:37
@AcidShout $a - $b works for numbers, but not strings, objects, or arrays. – mcrumley Sep 25 '15 at
13  
18:29
@mcrumley No, it's worse than that. In general $a - $b doesn't even work for numbers; it works only
for integers. It doesn't work for non-integer numbers, because usort casts your comparator function's
12   return values to int, which means 0.5 gets cast to 0, which means that two numbers with a difference of
less than 1, such as 4 and 4.6, may (depending upon which one gets passed as the first argument to your
comparator function) incorrectly compare as equal. – Mark Amery Nov 5 '15 at 15:54
4   @MarkAmery the migration guide isn't the documented behavior of the operator. For that you want to
look at the language operators section of the manual for that php.net/language.operators.comparison the
actual behavior behind this relies on various comparison functions of the API, like when you're doing
strcmp for strings, where you can not guarantee the actual return value in every single case. Sure, it's
almost always 1, 0, or -1, but for the cases where you can't guarantee it like in wrapping libc's strcmp,
you offer up the same defined behavior as the underlying spec to be safe – Sherif Jan 20 '16 at 22:45
@MarkAmery The point here is not to allow people to rely on undefined behavior. For the one case
where someones gets a value that is not exactly 1, 0, or -1, you get someone filing a bug report thinking
7   there's something wrong in the language. Which is why we document that all we can guarantee is that
value will be less than, greater than, or equal to 0, and not necessarily 1, 0, and -1. – Sherif Jan 20 '16 at
22:50
show 4 more comments

Type Operators
instanceof is used to determine whether a PHP variable is an instantiated object of a certain class.

<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);

The above example will output:

bool(true)
bool(false)

Reason: Above Example $a is a object of the mclass so use only a mclass data not instance of with the
sclass

Example with inheritance


<?php
class pclass { }
class childclass extends pclass { }
$a = new childclass;
var_dump($a instanceof childclass);
var_dump($a instanceof pclass);

The above example will output:

bool(true)
bool(true)

Example with Clone


<?php
class cloneable { }
$a = new cloneable;
$b = clone $a;
var_dump($a instanceof cloneable);
var_dump($b instanceof cloneable);
The above example will output:

bool(true)
bool(true)

The above works with 'interfaces' as well. This is useful for checking that a particular interface is

available. – Ryan Vincent Feb 24 '14 at 11:38
add a comment

An overview of operators in PHP :

Logical Operators :
 $a && $b : TRUE if both $a and $b are TRUE.
 $a || $b : TRUE if either $a or $b is TRUE.
 $a xor $b : TRUE if either $a or $b is TRUE, but not both.
 ! $a : TRUE if $a is not TRUE.
 $a and $b : TRUE if both $a and $b are TRUE.
 $a or $b : TRUE if either $a or $b is TRUE.

Comparison operators :
 $a == $b : TRUE if $a is equal to $b after type juggling.
 $a === $b : TRUE if $a is equal to $b, and they are of the same type.
 $a != $b : TRUE if $a is not equal to $b after type juggling.
 $a <> $b : TRUE if $a is not equal to $b after type juggling.
 $a !== $b : TRUE if $a is not equal to $b, or they are not of the same type.
 $a < $b : TRUE if $a is strictly less than $b.
 $a > $b : TRUE if $a is strictly greater than $b.
 $a <= $b : TRUE if $a is less than or equal to $b.
 $a >= $b : TRUE if $a is greater than or equal to $b.
 $a <=> $b : An integer less than, equal to, or greater than zero when $a is respectively less than, equal
to, or greater than $b. Available as of PHP 7.

Arithmetic Operators :
 -$a : Opposite of $a.
 $a + $b : Sum of $a and $b.
 $a - $b : Difference of $a and $b.
 $a * $b : Product of $a and $b.
 $a / $b : Quotient of $a and $b.
 $a % $b : Remainder of $a divided by $b.
 $a ** $b : Result of raising $a to the $b'th power (introduced in PHP 5.6)

Incrementing/Decrementing Operators :
 ++$a : Increments $a by one, then returns $a.
 $a++ : Returns $a, then increments $a by one.
 --$a : Decrements $a by one, then returns $a.
 $a-- : Returns $a, then decrements $a by one.

Bitwise Operators :
 $a & $b : Bits that are set in both $a and $b are set.
 $a | $b : Bits that are set in either $a or $b are set.
 $a ^ $b : Bits that are set in $a or $b but not both are set.
 ~ $a : Bits that are set in $a are not set, and vice versa.
 $a << $b : Shift the bits of $a $b steps to the left (each step means "multiply by two")
 $a >> $b : Shift the bits of $a $b steps to the right (each step means "divide by two")

String Operators :
 $a . $b : Concatenation of $a and $b.

Array Operators :
 $a + $b : Union of $a and $b.
 $a == $b : TRUE if $a and $b have the same key/value pairs.
 $a === $b : TRUE if $a and $b have the same key/value pairs in the same order and of the same types.
 $a != $b : TRUE if $a is not equal to $b.
 $a <> $b : TRUE if $a is not equal to $b.
 $a !== $b : TRUE if $a is not identical to $b.

Assignment Operators :
 $a = $b : The value of $b is assigned to $a
 $a += $b : Same as $a = $a + $b
 $a -= $b : Same as $a = $a - $b
 $a *= $b : Same as $a = $a * $b
 $a /= $b : Same as $a = $a / $b
 $a %= $b : Same as $a = $a % $b
 $a **= $b : Same as $a = $a ** $b
 $a .= $b : Same as $a = $a . $b
 $a &= $b : Same as $a = $a & $b
 $a |= $b : Same as $a = $a | $b
 $a ^= $b : Same as $a = $a ^ $b
 $a <<= $b : Same as $a = $a << $b
 $a >>= $b : Same as $a = $a >> $b

Note

and operator and or operator have lower precedence than assignment operator =.

This means that $a = true and false; is equivalent to ($a = true) and false.

In most cases you will probably want to use && and ||, which behave in way known from languages like C,
Java or JavaScript.

add a comment

Spaceship Operator <=> (Added in PHP 7)


Examples for <=> Spaceship operator (PHP 7, Source: PHP Manual):

Integers, Floats, Strings, Arrays & objects for Three-way comparison of variables.

// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

echo "a" <=> "aa"; // -1


echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 0

$a = (object) ["a" => "b"];


$b = (object) ["a" => "c"];
echo $a <=> $b; // -1

$a = (object) ["a" => "c"];


$b = (object) ["a" => "b"];
echo $a <=> $b; // 1

// only values are compared


$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 1

     This is a copy of this answer. – David Archibald Jan 11 at 19:59


     Check php.net/manual/en/language.operators.comparison.php for the reference – rajangupta Jan 12 at 7:01
add a comment
{} Curly braces

 Blocks - curly braces/no curly braces?


 Curly braces in string in PHP
 PHP curly braces in array notation

And some words about last post

$x[4] = 'd'; // it works


$x{4} = 'd'; // it works

$echo $x[4]; // it works


$echo $x{4}; // it works

$x[] = 'e'; // it works


$x{} = 'e'; // does not work

$x = [1, 2]; // it works


$x = {1, 2}; // does not work

echo "${x[4]}"; // it works


echo "${x{4}}"; // does not work

echo "{$x[4]}"; // it works


echo "{$x{4}}"; // it works

add a comment
PHP Strings: PHP Strings can be specified in four ways not just two ways:

1) Single Quote Strings:

$string = 'This is my string'; // print This is my string


2) Double Quote Strings:

$str = 'string';

$string = "This is my $str"; // print This is my string

3) Heredoc:

$string = <<<EOD
This is my string
EOD; // print This is my string

4) Nowdoc (since PHP 5.3.0):

$string = <<<'END_OF_STRING'
This is my string
END_OF_STRING; // print This is my string

1   This already exists: stackoverflow.com/q/3446216/3933332 – Rizier123 Jan 13 '16 at 14:24


add a comment
QUESTION:

What does => mean?

ANSWER:

=> Is the symbol we humans decided to use to separate "Key" => "Value" pairs in Associative Arrays.

ELABORATING:

To understand this, we have to know what Associative Arrays are. The first thing that comes up when a
conventional programmer thinks of an array (in PHP) would be something similar to:

$myArray1 = array(2016, "hello", 33);//option 1

$myArray2 = [2016, "hello", 33];//option 2

$myArray3 = [];//option 3
$myArray3[] = 2016;
$myArray3[] = "hello";
$myArray3[] = 33;

Where, if wanted to call the array in some later part of the code, we could do:

echo $myArray1[1];// output: hello


echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello

So far so good. However, as humans, we might find it hard to remember that index [0] of the array is the value
of the year 2016, index [1] of the array is a greetings, and index [2] of the array is a simple integer value.
The alternative we would then have is to use what is called an Associative Array. An Associative array has a
few differences from a Sequential Array (which is what the previous cases were since they increment the
index used in a predetermined sequence, by incrementing by 1 for each following value).

Differences (between a sequential and associative array):

 Durring the declaration of an Associative Array, you don't only include the value of what you want to
put in the array, but you also put the index value (called the key) which you want to use when calling
the array in later parts of the code. The following syntax is used during it's declaration: "key" =>
"value".
 When using the Associative Array, the key value would then be placed inside the index of the array to
retrieve the desired value.

For instance:

$myArray1 = array(
"Year" => 2016,
"Greetings" => "hello",
"Integer_value" => 33);//option 1

$myArray2 = [
"Year" => 2016,
"Greetings" => "hello",
"Integer_value" => 33];//option 2

$myArray3 = [];//option 3
$myArray3["Year"] = 2016;
$myArray3["Greetings"] = "hello";
$myArray3["Integer_value"] = 33;

And now, to receive the same output as before, the key value would be used in the arrays index:

echo $myArray1["Greetings"];// output: hello


echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello

FINAL POINT:

So from the above example, it is pretty easy to see that the => symbol is used to express the relationship of an
Associative Array between each of the key and value pairs in an array DURING the initiation of the values
within the array.

Question:

What does "&" mean here in PHP?

PHP "&" operator


Makes life more easier once we get used to it..(check example below carefully)

& usually checks bits that are set in both $a and $b are set.

have you even noticed how these calls works?

error_reporting(E_ERROR | E_WARNING | E_PARSE);


error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL);

So behind all above is game of bitwise operator and bits.

One usefull case of these is easy configurations like give below, so a single integer field can store thousands of
combos for you.

Most people have already read the docs but didn't reliase the real world use case of these bitwise operators.

Example That you 'll love


<?php

class Config {

// our constants must be 1,2,4,8,16,32,64 ....so on


const TYPE_CAT=1;
const TYPE_DOG=2;
const TYPE_LION=4;
const TYPE_RAT=8;
const TYPE_BIRD=16;
const TYPE_ALL=31;

private $config;

public function __construct($config){


$this->config=$config;

if($this->is(Config::TYPE_CAT)){
echo 'cat ';
}
if($this->is(Config::TYPE_DOG)){
echo 'dog ';
}
if($this->is(Config::TYPE_RAT)){
echo 'rat ';
}
if($this->is(Config::TYPE_LION)){
echo 'lion ';
}
if($this->is(Config::TYPE_BIRD)){
echo 'bird ';
}
echo "\n";
}

private function is($value){


return $this->config & $value;
}
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird
shareimprove this answer edited Mar 20 at 5:37 community wiki

You might also like