Manual unset and GC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello, folks.

> TL;DR: Does setting a variable to `null` (or even `unset`ing it) have **any** effect if that's the last instruction of a function?

Full version of the question with context:

I have a question about the inner workings of PHP that was raised by
some people at work.

In the code we write at the company I work for, there's a guideline to
always assign `null` to the variables of type `PdoStatement`.
Something like the following:

```
$stm = null;
```

I understand this removes the reference to the object, calls the
destructor and frees the memory, but the point is: the guideline
mandates that we do that even if it is the last instruction of a
function, for example:

```
function example(): void
{
    // run your SQL queries

    $stm = null;
}
```

I understand that this last line is not needed and removing it would
have literally no effect on the code execution since `$stm` will go
out of scope and the same things (remove reference, call destructor
and free memory) will happen exactly the same.

While discussing this with a few colleagues it was pointed out that
**maybe** PHP will execute the GC immediately when we do `$stm = null`
but not when the variable goes out of scope, making the explicit null
as some sort of optimization.

I didn't find any resources on the documentation that could point to
which assumption is correct, so I post the question here:

Does setting a variable to `null` (or even `unset`ing it) have **any**
effect if that's the last instruction of a function?

Thank you



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux