Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:82044 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 50778 invoked from network); 6 Feb 2015 14:35:52 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 6 Feb 2015 14:35:52 -0000 Authentication-Results: pb1.pair.com header.from=guilhermeblanco@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=guilhermeblanco@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.223.171 as permitted sender) X-PHP-List-Original-Sender: guilhermeblanco@gmail.com X-Host-Fingerprint: 209.85.223.171 mail-ie0-f171.google.com Received: from [209.85.223.171] ([209.85.223.171:40450] helo=mail-ie0-f171.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id FE/03-45146-741D4D45 for ; Fri, 06 Feb 2015 09:35:52 -0500 Received: by iecat20 with SMTP id at20so1638460iec.7 for ; Fri, 06 Feb 2015 06:35:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=F6MwKuQFXAzpWzuPTQ7JQh2hDqUbfs321Gd/Y2i35xA=; b=dCGYMjpiUjGCGx7spZ3TjLco29uGVVuUEPaeLzjIAbD0xWiGf9ET2M8IvgfN91Ry3A /6j3D+RFudTsQmUsO0CwKTiyNEN8G1wjZd50uMiH2xChqoRYnObtbwg3QtcyBnMAw+oV 9kfX3aG0Si4Kw//+0NmUevRCd7Gp9k0JKVo++k+/N71phkeWiIMJZAXlReDFGV9QZGK8 jpNk50Z2ayzeXTOtUO93rv67nRrcYE3RRkrGF3rWEc4I/CfZVrjiEG+ACPGXMVeD6z2f 5gW5yVue8eQooCdqYAgqcBhNMYiXaKQOm+Uv9BfRkrmjmRsnpII8xBjx/ZfBtLKZpxIY aLig== X-Received: by 10.107.29.200 with SMTP id d191mr2743943iod.56.1423233349144; Fri, 06 Feb 2015 06:35:49 -0800 (PST) MIME-Version: 1.0 Received: by 10.64.238.75 with HTTP; Fri, 6 Feb 2015 06:35:28 -0800 (PST) In-Reply-To: <031501d04217$b393bff0$1abb3fd0$@tekwire.net> References: <54D37D41.2030706@hoa-project.net> <54D470FA.6000303@hoa-project.net> <02d301d041f3$0c5f3990$251dacb0$@tekwire.net> <031501d04217$b393bff0$1abb3fd0$@tekwire.net> Date: Fri, 6 Feb 2015 09:35:28 -0500 Message-ID: To: =?UTF-8?Q?Fran=C3=A7ois_Laupretre?= Cc: Yasuo Ohgaki , Dmitry Stogov , Pierre Joye , "Ivan Enderlin @ Hoa" , PHP internals Content-Type: multipart/alternative; boundary=001a113fdb383573b3050e6c569b Subject: Re: [PHP-DEV] Design by Contract From: guilhermeblanco@gmail.com ("guilhermeblanco@gmail.com") --001a113fdb383573b3050e6c569b Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Dmitry, Last time we discussed was this one: https://wiki.php.net/rfc/annotations The ideal one was the version before: https://wiki.php.net/rfc/annotations?rev=3D1300089833 To have this in core, we need to step back and re-evaluate how we could achieve 80% minimum. My original proposal was trying 95%, too much. We could get 80% by having a simpler implementation, something like this: <[ new Foo() ]> class Bar { } And all it would be required is 2 new methods as part of Reflection classes= . The example could be translated into this: $bar =3D new \ReflectionClass('Bar'); $bar->setMetadata([ new Foo() ]); var_dump($bar->getMetadata()); array(1) { [0] =3D> object(Foo) } Does that sound reasonable? It would allow us to achieve "nested annotations". However, it would not achieve a bunch of other things, like named parameters (you couldn't only do one or two as a constructor params... Foo(null, null, 'value') would be seen everywhere). We forget about inheritance, so metadata wouldn't be propagated to inherited classes, methods or properties. Also, if we implement in important Reflection structures, that would incredibly improve its power, such as: ReflectionClass, ReflectionProperty, ReflectionMethod, ReflectionParameter and ReflectionFunction. I think this is more reasonable than my original proposal, addresses 80% of use cases and still help all projects around. Named parameters would be my next battle then... =3DD []s, On Fri, Feb 6, 2015 at 9:17 AM, Fran=C3=A7ois Laupretre wrote: > > De : yohgaki@gmail.com [mailto:yohgaki@gmail.com] De la part de Yasuo > Ohgaki > > > Personally, backward compatibility is not too important. > > PHP5 is dead by PHP 7.2 release... This is the reason why. > > It's only 3 years later, only 2 years later after PHP 7.0 release. > > That's where we disagree, as I think it's most important. > > Thinking that PHP 5 is dead in 3 years is extremely na=C3=AFve IMO. You > probably didn't live the PHP 4/5 migration but I guess we won't have more > than 30 % of production servers under PHP 7 in 2018, just due to the dela= ys > of distros, hosting companies, and others. > > Now, suppose you're distributing a library or a framework, like Symfony, > Doctrine, etc. Someone tells you : "Here's the new DbC feature. You can u= se > it but this implies splitting your code to two independent branches and > maintain them in parallel until you have no PHP 5 customer anymore.". Wha= t > do you think you'll do (or won't do) ? > > @Pierre,@Dmitry : you have a better vision than mine on the migration > process. What's your opinion on forcing software developers to maintain t= wo > separate branches ? > > Once again, the conditions in @assert lines ARE PHP code. There's no new > syntax. There is no real difference between writing 'assert()' > and '@assert ', especially if the require/ensure blocks should > contain 'assert' statements only. > > > What I believe is not important to you. I could be wrong. > > It is important. As I may be wrong too. > > Cheers > > Fran=C3=A7ois > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > --=20 Guilherme Blanco MSN: guilhermeblanco@hotmail.com GTalk: guilhermeblanco Toronto - ON/Canada --001a113fdb383573b3050e6c569b--