php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #79620 Typed nullable attribute throws Fatal error
Submitted: 2020-05-22 10:08 UTC Modified: 2020-05-22 10:22 UTC
From: jiri dot fajman at designeo dot cz Assigned:
Status: Not a bug Package: *General Issues
PHP Version: 7.4.6 OS: Ubuntu 20.04
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: jiri dot fajman at designeo dot cz
New email:
PHP Version: OS:

 

 [2020-05-22 10:08 UTC] jiri dot fajman at designeo dot cz
Description:
------------
PHP 7.4.6

Following code throws "Typed property A::$x must not be accessed before initialization".

Expected behavior:
Method getX() returns null.

I cannot imagine any single usecase for this behavior and I consider it a serious bug leading back to PHP 7.0 hacks for nullable types in method signature.

Note: Omitting getter method is not acceptable since accessing non existing attribute does not throw error.

Test script:
---------------
<?php

class A {
    private ?string $x;

    /**
     * @return string|null
     */
    public function getX(): ?string
    {
        return $this->x;
    }

    /**
     * @param string|null $x
     */
    public function setX(?string $x): void
    {
        $this->x = $x;
    }
}

$a = new A();

var_dump($a->getX());

Expected result:
----------------
Expected result is that var_dump prints null, not crash with fatal error

Actual result:
--------------
Fatal error:

Typed property A::$x must not be accessed before initialization

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-05-22 10:10 UTC] bwoebi@php.net
-Status: Open +Status: Not a bug
 [2020-05-22 10:10 UTC] bwoebi@php.net
This works as intended. Initialize the variable upon declaration:

private ?string $x = null;
 [2020-05-22 10:18 UTC] jiri dot fajman at designeo dot cz
Thank you for your reply.

Could you please provide an example, where this behaviour without default initialization can be used? I just can't find any. Thank you.
 [2020-05-22 10:22 UTC] nikic@php.net
@jiri: Any time you use a constructor which initializes properties.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue Mar 11 19:01:31 2025 UTC