php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #79804 Reflection doesn't know about DateInterval and DatePeriod properties
Submitted: 2020-07-07 15:12 UTC Modified: 2020-07-08 13:19 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 1 (0.0%)
From: ondrej at mirtes dot cz Assigned:
Status: Open Package: Reflection related
PHP Version: 8.0.0alpha1 OS:
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2020-07-07 15:12 UTC] ondrej at mirtes dot cz
Description:
------------
There isn't any PHP version that would know about properties coming from classes like DateInterval and DatePeriod. I think that PHP 8 is a great opportunity to fix this.

There are also other classes with the same problem, mainly coming from ext-dom. Here's a list of how I compensated for that in PHPStan: https://github.com/phpstan/phpstan-src/blob/069ffbbece0323a1a22557f41237d4b9efd6c521/src/Reflection/PhpDefect/PhpDefectClassReflectionExtension.php

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

$ref = new \ReflectionClass(\DateInterval::class);
foreach ($ref->getProperties() as $property) {
    var_dump($property–>getName());
}

$ref = new \ReflectionClass(\DatePeriod::class);
foreach ($ref->getProperties() as $property) {
    var_dump($property–>getName());
}

Expected result:
----------------
Dumped list of properties from:

https://www.php.net/manual/en/class.dateinterval.php
https://www.php.net/manual/en/class.dateperiod.php


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-07-07 15:13 UTC] ondrej at mirtes dot cz
The actual result is empty: https://3v4l.org/68832
 [2020-07-07 15:29 UTC] nikic@php.net
I'm not willing to address this unless either a) those become normal properties or b) we get first-class accessor support, and those properties become accessors.

For now, the right way to think about them is like properties implemented through __get(), which is effectively what these are, just on the internal layer.
 [2020-07-07 15:31 UTC] nikic@php.net
We may be able to address some cases though, for example I don't see any reason why LibXMLError doesn't have declared properties -- it doesn't seem to be doing anything magic.
 [2020-07-07 15:36 UTC] ondrej at mirtes dot cz
These properties are not even mentioned in any way in these new stubs (https://github.com/php/php-src/blob/master/ext/date/php_date.stub.php) which makes it really difficult to support them in static analysis...
 [2020-07-08 08:49 UTC] nikic@php.net
Typed property declarations for LibXMLError added in https://github.com/php/php-src/commit/22be60bb251dd6bde055180be527d9cf8d331e28.
 [2020-07-08 13:19 UTC] ondrej at mirtes dot cz
Can something be done about LibXMLError missing from the stubs? https://github.com/php/php-src/blob/master/ext/libxml/libxml.stub.php
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Mon Nov 30 14:01:24 2020 UTC