Edit report at https://bugs.php.net/bug.php?id=62537&edit=1
ID: 62537 Comment by: dagguh at gmail dot com Reported by: jeremeamia at gmail dot com Summary: Composed class has fatal error with duplicate, equal array properties Status: Open Type: Bug Package: Class/Object related Operating System: Ubuntu PHP Version: 5.4.4 Block user comment: N Private report: N New Comment: If it is logically the same thing, it should be only in one of these traits, don't you think? SRP and DRY, fellas Previous Comments: ------------------------------------------------------------------------ [2012-07-20 09:07:13] ahar...@php.net I'd call this a bug, rather than a documentation issue; if Foo::$var === Bar::$var, I can't really see why it should fatal. Reclassifying, and we'll see what the engine folk think. ------------------------------------------------------------------------ [2012-07-12 01:36:55] jeremeamia at gmail dot com Another test script, which might be even more relevant: trait Foo {public $var = [];} class Bar {use Foo; public $var = [];} This also causes a fatal error for me, which should only be a strict error based on the documentation. ------------------------------------------------------------------------ [2012-07-11 19:45:00] jeremeamia at gmail dot com Description: ------------ --- >From manual page: http://www.php.net/language.oop5.traits --- The manual says, "If a trait defines a property then a class can not define a property with the same name, otherwise an error is issued. It is an E_STRICT if the class definition is compatible (same visibility and initial value) or fatal error otherwise." This does not appear to be true when the same-named properties have array values. See the test script for a quick example. It seems that it behaves as the documentation describes only with scalar values. This is either missing/erroneous documentation (i.e. the behavior is intended), or it is a bug (i.e. equal array values should not cause a fatal error). Test script: --------------- trait Foo {public $var = [];} trait Bar {public $var = [];} class Baz {use Foo, Bar;} Expected result: ---------------- To behave as the documentation describes, i.e. no fatal errors occuring. Actual result: -------------- PHP Fatal error: Foo and Bar define the same property ($var) in the composition of Baz. However, the definition differs and is considered incompatible. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62537&edit=1