php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #74269 It's possible to override trait property with different loosely-equal value
Submitted: 2017-03-18 20:58 UTC Modified: 2017-03-18 21:09 UTC
From: bugsphp077 at nabialek dot org Assigned:
Status: Closed Package: Class/Object related
PHP Version: 7.0.17 OS: Linux/Windows
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: bugsphp077 at nabialek dot org
New email:
PHP Version: OS:

 

 [2017-03-18 20:58 UTC] bugsphp077 at nabialek dot org
Description:
------------
According to PHP manual:

"If a trait defines a property then a class can not define a property with the same name unless it is compatible (same visibility and initial value), otherwise a fatal error is issued. Before PHP 7.0.0, defining a property in the class with the same visibility and initial value as in the trait, raised an E_STRICT notice. "

but it seems it's not completely true. Some casts are done, so in fact you can use different value.

Test script:
---------------
trait PropertiesTrait
{
    public $same = true;

    public function message()
    {
        if ($this->same === true) {
            return "A";
        }
        return "B";
    }
}

class PropertiesExample
{
    use PropertiesTrait;
    public $same = 2;
}

$example = new PropertiesExample();
echo $example->message();

Expected result:
----------------
Fatal error as described in documentation.

Actual result:
--------------
B (Same result is for PHP 7.1.1). No warning/notice is generated

Patches

Pull Requests

Pull requests:

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-03-18 21:00 UTC] bugsphp077 at nabialek dot org
-Operating System: Windows +Operating System: Linux/Windows
 [2017-03-18 21:00 UTC] bugsphp077 at nabialek dot org
In fact it's for both Linux and Windows
 [2017-03-18 21:09 UTC] requinix@php.net
-Summary: It's possible to override trait property with different value +Summary: It's possible to override trait property with different loosely-equal value -Status: Open +Status: Verified
 [2017-03-18 21:09 UTC] requinix@php.net
The conflict detection logic uses zend_operator's compare_function, which does loose comparisons. The original RFC doesn't say whether to be strict or loose but I think the intention is that it would be strict.
 [2017-05-01 11:00 UTC] nikic@php.net
Automatic comment on behalf of mail@pmmaga.net
Revision: http://git.php.net/?p=php-src.git;a=commit;h=92124f9cdc20c6a9c22f9b54092ef945c41f2bb5
Log: Fixed bug #74269: Strict comparison of initial trait property values
 [2017-05-01 11:00 UTC] nikic@php.net
-Status: Verified +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 13:01:29 2024 UTC