3

In C we can use pointer for a function parameter:

test( *text);
function test( *txt){
 //codes goes here
}

Is it possible in PHP?

whatyouhide
  • 15,897
  • 9
  • 57
  • 71
Tanmoy
  • 1,035
  • 6
  • 19
  • 1
    Although there at no 'pointers' in PHP, you can pass 'references': [You can pass a variable by reference to a function so the function can modify the variable.](https://php.net/manual/en/language.references.pass.php). e.g _`function test(&$param1);`_ would allow `$param1` to be modified in the function. – Ryan Vincent May 16 '15 at 10:55

2 Answers2

3

Variable names in PHP start with $ so $entryId is the name of a variable. $this is a special variable in Object Oriented programming in PHP, which is reference to current object.

-> is used to access an object member (like properties or methods) in PHP, like the syntax in C++.

So your code means this: place the value of variable $entryId into the entryId field (or property) of this object.

The & operator in PHP, means pass reference. Here is an example:

$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32

$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33

In the above code, because we used & operator, a reference to where $b is pointing is stored in $a. So $a is actually a reference to $b.

There is a good explanation of pointers on this page

Community
  • 1
  • 1
Maraboc
  • 10,550
  • 3
  • 37
  • 48
1

There are references, but that's not the same as pointers.

php.net has multiple pages explaining What References Are, What References Do and What References Are Not.
There too, it is mentioned multiple times that

References are not pointers.

They provide a way to assign $a to $b so that if you reassign $b, $a changes as well:

$a = 'a';
$b = &$a; // Reference
$b = 'b'; // Now $a == 'b'

This can be used for function arguments as well:

function myFunc(&$b)
{
    $b = 'b';
}
$a = 'a';
myFunc($a); // Now $a == 'b'

Before PHP 5.3.0 is was also possible to do a thing called "call-time pass-by-reference", where you would have a "normal" function declaration and use the & operator in the call instead:

function myFunc($b)
{
    $b = 'b';
}
$a = 'a';
myFunc(&$a); // As of PHP 5.3.0 produces a Fatal Error, saying:
             // Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of myFunc().

But beware! Assigning another reference will not update the original reference:

$a = 'a';
$b = 'b';
$c = &$a;
$c = &$b; // $a == 'a'

[ Demo ]

A trap resulting from that exists with the global keyword.

$a = 'a';
$b = 'b';

function myFunc()
{
    global $a, $b;
    $a = &$b;
    var_dump($a);
}

myFunc();       // 'b'
var_dump($a);   // 'a'

That is because global $a effectively means $a = &$GLOBALS['a'], so assigning it a new reference will not update $GLOBALS.
Of course you can prevent that by using $GLOBALS directly.
But if you're using globals at all, you should probably rethink your design anyway.

With references, there is now also a difference between setting a variable = NULL and using unset().
= NULL follows references, unset() does not:

$a = 'a';
$b = &$a;
unset($b); // $a == 'a'

$a = 'a';
$b = &$a;
$b = NULL; // $a == NULL

[ Demo ]


Bottom line:

References allow for things that wouldn't be possible without them, but sometimes do not behave the way one would expect them to, because of how PHP was built.

Siguza
  • 21,155
  • 6
  • 52
  • 89