Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:51007 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 66708 invoked from network); 11 Dec 2010 16:47:16 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Dec 2010 16:47:16 -0000 Authentication-Results: pb1.pair.com smtp.mail=php@stefan-marr.de; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=php@stefan-marr.de; sender-id=unknown Received-SPF: error (pb1.pair.com: domain stefan-marr.de from 85.88.12.247 cause and error) X-PHP-List-Original-Sender: php@stefan-marr.de X-Host-Fingerprint: 85.88.12.247 toolslave.net Received: from [85.88.12.247] ([85.88.12.247:34340] helo=uhweb12247.united-hoster.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id F7/82-42972-31BA30D4 for ; Sat, 11 Dec 2010 11:47:16 -0500 Received: from cust194-138.dsl.as47377.net ([62.166.194.138] helo=[192.168.0.26]) by uhweb12247.united-hoster.com with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1PRSaY-0006qr-1d for internals@lists.php.net; Sat, 11 Dec 2010 17:46:28 +0100 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Date: Sat, 11 Dec 2010 17:47:03 +0100 Message-ID: <89C52156-CF92-4DDB-8BA4-4ABF6883512C@stefan-marr.de> To: "internals@lists.php.net Development" Mime-Version: 1.0 (Apple Message framework v1082) X-Mailer: Apple Mail (2.1082) Subject: Traits and Properties From: php@stefan-marr.de (Stefan Marr) Hi: Traits do not provide any special provisioning for handling properties, = especially, there is no language solution for handling colliding = property names. The current solution/idiom for handling state safely in a trait is to = use either abstract set/get methods or an abstract get that returns a = reference to the property in the class. However, at the moment it is possible to define properties in a trait: trait Foo { private $a; public $foo; } For the moment, that information is completely ignored, thus: class Bar { use Foo; } property_exists('Bar', 'a') =3D=3D=3D false Well, and that is a rather inconsistent status-quo. I would like to have that fixed in one or another way. One possibility would be to forbid property definition in a trait = altogether. That reduces a bit the possibility to have wrong expectations about = properties, however, the dynamic property creation is still possible. Another way would be to merge the properties in the composing class. The question here would be how to treat visibility modifiers: how to = merge public and private, should it result in public, or private? And, to discorage users to go this way, should there be a STRICT notice? = Options here are a notice whenever a property is defined in a trait, or = whenever properties are silently merged. Comments very welcome. Thanks Stefan --=20 Stefan Marr Software Languages Lab Vrije Universiteit Brussel Pleinlaan 2 / B-1050 Brussels / Belgium http://soft.vub.ac.be/~smarr Phone: +32 2 629 2974 Fax: +32 2 629 3525