On 16 July 2018 at 16:42, Marco Pivetta <ocram...@gmail.com> wrote:

> There are naturally 3 states in the engine:
>
>  1 - value set
>  2 - value not set (default `null`)
>  3 - undefined/uninitialised
>
> These have been around since 5.0 AFAIK.
>


"Undefined" and "uninitialised" are not the same state:

class A {
    public $alpha = 42;
    public $beta;
    // no such property as $charlie;
    public SomeClass $delta;
}
$a = new A;

$a->alpha; // value set
$a->beta; // value not set (default null)
$a->charlie; // undefined, but still accessible, with implicit value null
$a->delta; // uninitialised; all attempts to access will throw an error

The behaviour of $a->charlie is consistent with other undefined variables
(e.g. a local variable can be read before it is written to). I can't think
of anything in the language which behaves the same way as $a->delta.

Regards,
-- 
Rowan Collins
[IMSoP]

Reply via email to