Reference — What does this symbol mean in PHP?

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 , so it's easier for us to reference them, not to copy over content from the PHP Manual.

¹ Note: Since January 2013, 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

=& References

&= Bitwise Operators

&& Logical Operators

% Arithmetic Operators

!! Logical Operators

@ Error Control Operators

?: Ternary Operator

?? Null Coalesce Operator (since PHP 7)

: Alternative syntax for control structures, Ternary Operator

:: Scope Resolution Operator

\ Namespaces

-> Classes And Objects

=> Arrays

^ Bitwise Operators

>> Bitwise Operators

<< Bitwise Operators

<<< Heredoc or Nowdoc

= Assignment Operators

== Comparison Operators

=== Comparison Operators

!== Comparison Operators

!= Comparison Operators

<> Comparison Operators

<=> Comparison Operators (since PHP 7.0)

  • Spaceship (three way comparison) operator

| Bitwise Operators

|| Logical Operators

~ Bitwise Operators

+ Arithmetic Operators, Array Operators

+= and -= Assignment Operators

++ and -- Incrementing/Decrementing Operators

.= Assignment Operators

. String Operators

, Function Arguments

, Variable Declarations

$$ Variable Variables

` Execution Operator

<?= Short Open Tags

[] Arrays (short syntax since PHP 5.4)

<? Opening and Closing tags

... Argument unpacking (since PHP 5.6)

** Exponentiation (since PHP 5.6)

# One-line shell-style comment


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.


Bitwise Operator

What is a bit? A bit is a representation of 1 or 0. Basically OFF(0) and ON(1)

What is a byte? A byte is made up of 8 bits and the highest value of a byte is 255, which would mean every bit is set. We will look at why a byte's maximum value is 255.

|      1 Byte ( 8 bits )                  |
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     

This representation of 1 Byte

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 (1 Byte)

A few examples for better understanding

The "AND" operator: &

$a =  9;
$b = 10;
echo $a & $b;

This would output the number 8. Why? Well let's see using our table example.

|      1 Byte ( 8 bits )                  |
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
|      &     |   0|  0|  0|  0| 1| 0| 0| 0|

So you can see from the table the only bit they share together is the 8 bit.

Second example

$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

The two shared bits are 32 and 4, which when added together return 36.

The "Or" operator: |

$a =  9;
$b = 10;
echo $a | $b;

This would output the number 11. Why?

|      1 Byte ( 8 bits )                  |
|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|     
|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|    
|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|
|      |     |   0|  0|  0|  0| 1| 0| 1| 1|

You will notice that we have 3 bits set, in the 8, 2, and 1 columns. Add those up: 8+2+1=11.

What is <=> (the 'Spaceship' Operator) in PHP 7?

This <=> operator will offer combined comparison in that it will :

Return 0 if values on either side are equal
Return 1 if value on the left is greater
Return -1 if the value on the right is greater

The rules used by the combined comparison operator are same as the currently used comparison operators by PHP viz. <, <=, ==, >= and >. Those who are from Perl or Ruby programming background may already be familiar with this new operator proposed for PHP7.

   //Comparing Integers

    echo 1 <=> 1; //ouputs 0
    echo 3 <=> 4; //outputs -1
    echo 4 <=> 3; //outputs 1

    //String Comparison

    echo "x" <=> "x"; // 0
    echo "x" <=> "y"; //-1
    echo "y" <=> "x"; //1

According to the RFC that introduced the operator, $a <=> $b evaluates to:

  • 0 if $a == $b
  • -1 if $a < $b
  • 1 if $a > $b

which seems to be the case in practice in every scenario I've tried, although strictly the official docs only offer the slightly weaker guarantee that $a <=> $b will return

an integer less than, equal to, or greater than zero when $a is respectively less than, equal to, or greater than $b

Regardless, why would you want such an operator? Again, the RFC addresses this - it's pretty much entirely to make it more convenient to write comparison functions for usort (and the similar uasort and uksort).

usort takes an array to sort as its first argument, and a user-defined comparison function as its second argument. It uses that comparison function to determine which of a pair of elements from the array is greater. The comparison function needs to return:

an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

The spaceship operator makes this succinct and convenient:

$things = [
        'foo' => 5.5,
        'bar' => 'abc'
        'foo' => 7.7,
        'bar' => 'xyz'
        'foo' => 2.2,
        'bar' => 'efg'

// Sort $things by 'foo' property, ascending
usort($things, function ($a, $b) {
    return $a['foo'] <=> $b['foo'];

// Sort $things by 'bar' property, descending
usort($things, function ($a, $b) {
    return $b['bar'] <=> $a['bar'];

More examples of comparison functions written using the spaceship operator can be found in the Usefulness section of the RFC.

Its a new operator for combined comparison. Similar to strcmp() or version_compare() in behavior, but it can be used on all generic PHP values with the same semantics as <, <=, ==, >=, >. It returns 0 if both operands are equal, 1 if the left is greater, and -1 if the right is greater. It uses exactly the same comparison rules as used by our existing comparison operators: <, <=, ==, >= and >.

click here to know more

What Does This Mean in PHP -> or =>

The double arrow operator, =>, is used as an access mechanism for arrays. This means that what is on the left side of it will have a corresponding value of what is on the right side of it in array context. This can be used to set values of any acceptable type into a corresponding index of an array. The index can be associative (string based) or numeric.

$myArray = array(
    0 => 'Big',
    1 => 'Small',
    2 => 'Up',
    3 => 'Down'

The object operator, ->, is used in object scope to access methods and properties of an object. It’s meaning is to say that what is on the right of the operator is a member of the object instantiated into the variable on the left side of the operator. Instantiated is the key term here.

// Create a new instance of MyObject into $obj
$obj = new MyObject();
// Set a property in the $obj object called thisProperty
$obj->thisProperty = 'Fred';
// Call a method of the $obj object named getProperty


calls/sets object variables. Ex:

$obj = new StdClass;
$obj->foo = 'bar';

=> Sets key/value pairs for arrays. Ex:

$array = array(
    'foo' => 'bar'

What does “->” mean/refer to in PHP?

-> accesses a member of an object. So $wp_query->max_num_pages is accessing the field max_num_pages in the object $wp_query. It can be used to access either a method or a field belonging to an object, and if you're familiar with C++ or Java, it's equivalent to myObject.myField

Firstly you should understand the following. In PHP and many other languages we have the following types of entites:

  • Variables
  • Arrays
  • Objects

The -> allows you to access a method or value within an object, the same way that [] allows you to access values within an array.

A class is like a box, and within that box there is a lot of items, and each item can interact with each other as they are within the same box.

For example:

class Box
    function firstItem()


    function secondItem()


The above is what we call a class. It's basically a structured piece of code that does not really do anything until it becomes an object.

The object is created by using the new keyword, which instantiates a class and creates an objects from it.

$box = new Box;

Now the above $box, which is an object created from the Box class, has methods inside, such as firstItem().

These are just like functions apart from within them we have another variable called $this and this is used to access other methods within that object.

Now to access the methods from outside the objects you have to use the operator described in your question.


The operator -> will allow you to execute the method from the variable $box.

It's like the period (.) in JavaScript and Java. It is just a simple access operator.