Edit report at https://bugs.php.net/bug.php?id=61147&edit=1
ID: 61147 Updated by: g...@php.net Reported by: greywire at gmail dot com Summary: No conflict resolution for properties in traits -Status: Open +Status: Suspended Type: Feature/Change Request Package: Class/Object related Operating System: MacOS X 10.7 PHP Version: 5.4.0RC8 Block user comment: N Private report: N New Comment: Unfortunately, the solution is not easy at all. One reason is the dynamic nature of PHP. You can easily access properties based on their string name: $foo = 'bar'; $this->$foo = 'foobar'; For exactly the same reason, we do NOT provide 'renaming'. The conflict resolution for methods allows to introduce an alias. Nothing more. An alias is a new name pointing to an unchanged method-body. (If you think about what that means, note that it breaks recursion in typical cases.) Thus, your proposal does not work with the current semantics. It would only result in a new property in the class that is never actually used. So far, we refrained from adding any of the constructs proposed in literature, since they would add considerable complexity. >From time to time there have been proposals for related features that could >make it into a future version of PHP, but for the moment being, I do not see how we can make this work without changing the nature of PHP. Suggestions are welcome of course. Thanks Stefan Previous Comments: ------------------------------------------------------------------------ [2012-02-20 18:59:00] greywire at gmail dot com Description: ------------ There is no way to resolve a conflict in two used traits with the same property. The resolution method used to resolve conflicting method names should be able to be used similarly on properties. I realize this may be the intended behavior to discourage use of properties in traits as properties were not originally intended in traits, but since properties are allowed, there should be a way to resolve the conflict, and the solution is simple and fits with existing syntax. Test script: --------------- <?php trait testone { public $test; } trait testtwo { public $test; } //** this should work but doesn't class traittest { use testtwo, testone { testone::$test insteadof testtwo; testtwo::$test as $testalso; } } ?> Expected result: ---------------- No errors or warnings. Actual result: -------------- Parse error: syntax error, unexpected '$test' (T_VARIABLE), expecting identifier (T_STRING) in index.php on line 14 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=61147&edit=1