Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:92710 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 96599 invoked from network); 25 Apr 2016 08:05:17 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 25 Apr 2016 08:05:17 -0000 Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 65.55.169.108 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 65.55.169.108 mail-bl2on0108.outbound.protection.outlook.com Received: from [65.55.169.108] ([65.55.169.108:56537] helo=na01-bl2-obe.outbound.protection.outlook.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 73/81-17738-ABFCD175 for ; Mon, 25 Apr 2016 04:05:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=RWSoftware.onmicrosoft.com; s=selector1-zend-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=+8kKIxU1C3VxISRVJ/3NbPbblEL4t+44dOkIRgY+hwk=; b=X9tklTnt1Oz8Bysxf27HVPnWRBHrI3epfQyDgnl8PkucI1TslsmhlBtB51Cu7lPYWkGR3teHy4qP4D0acrHwPKYzdfo+3kirR4idcyw/ScqJx88aIe4n6GbU1HRE+olSFGE++UIm6tVGKQ3HneAbYU2GF/smaxpNkc5xDr0Y+BU= Authentication-Results: php.net; dkim=none (message not signed) header.d=none;php.net; dmarc=none action=none header.from=zend.com; Received: from tpl2.home (92.62.57.172) by BY2PR0201MB1783.namprd02.prod.outlook.com (10.163.72.25) with Microsoft SMTP Server (TLS) id 15.1.466.19; Mon, 25 Apr 2016 08:05:07 +0000 To: , Sara Golemon References: <571BA0F0.2030400@fleshgrinder.com> <571C82A7.2060706@fleshgrinder.com> Message-ID: <571DCFA5.1090201@zend.com> Date: Mon, 25 Apr 2016 11:04:53 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: <571C82A7.2060706@fleshgrinder.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [92.62.57.172] X-ClientProxiedBy: DB5PR09CA0078.eurprd09.prod.outlook.com (10.162.34.46) To BY2PR0201MB1783.namprd02.prod.outlook.com (10.163.72.25) X-MS-Office365-Filtering-Correlation-Id: 06722ece-4fcd-47a7-1ff4-08d36ce051c2 X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB1783;2:NcgKL/7tovYC8ApWtrQP3yRi/++++CSFWklzEnZfKBVtigMjN+fB0x9UPTMWgCIgbT1ph0Qubn8aBzraARanN6ARri3QCdhwn6txe7/QTnX659wXbmyL/HYJ6i1cuDSvKLEpoVFLJ3M7oDl3W/R2E57YFHyypHBSHLQtpSrlu0BUrhAfiXqanXJeyko6yaad;3:q9H+RmaY+Geh1jGsNQnqs7JwRc7qRAi4zhZYY5pjrF1ThZvDBSgrOCxY2xUzXZHK6wMcr/N/g6Q+ZdZCG0fjTRXOHGhwhYvpxZomfb6UznZ6aK+BL67noAOJI4Bu6r5u X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0201MB1783; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB1783;25:RaL4iK9TpfbK8OplexaapeMugyQjOQZvGXH/22q44AJEqGapmI2b7L8GLkrmwwrEvTiY4ZgG0cfuS58spL5FbsamrMbkQW5IlbThvFkDQrqw7QKMlQ9+wsc0CQmPQpExXy9HHUfU4gj1Tgg5rMwmKhnDeVsf/4ZFfAkvbSToJsmGWhUxnHiqOBVGMfmyAIO13f1PzDpsO3hG6u6m0i6Ym+uVAj6MJddlTBrACk8YdBQPfU/tHa5nJWeXbXS668qE7yV99hGtiEamM843dJmvqXthTmaI9PnUVDpowYKXhGhZb/BP4XX2QKGgb20/8VyD0xhvj2Oo/U46S5bo3ju89uEJU5snpONNmlx3cbZCjehz/mdarbGVB9B5ngtwhmrfM/tCpkgRpWLuXyvtuhugo/apmivLtnksxhPTI70jiGDY/3k3JetMMERVrg8wnygejVWfIcp+owE78PdZMM5pW+KRjnTkzutjeBKqnXNwXZxofnTC9H8Zh6KBa+DOPD6Cxs/o1D+Ug3JZdQndoxa46NHAtGd6wDiFClAH42Bs2B1W1OjDGzz8j1Y5caGe65Bte32FbIsdVpQXcbCmZVvZwzM/Zf3HjUnGbSluHw7irdbkUcWqwnXcPLLSl5yBL37R2/PRSl8V2msrfEmwKnwdKcZ3rZW8iaXBPxPuXFyvug0= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB1783;20:y1Vu4dTMPA3FpkqLl7om8zju/6UJ7AazjPqvG2KfY6tsaKtPY/L97ueKdib1oCFAQeXp85zJ1KVH05vrort0/DuRl8Fwu6eEPZU+9o6ZFV/Y+WUXFeIWIBuoidcOrwmKvyWXwM6f8mIE9s6tN4Cngqm1PYnE5oHuKQHqSOCMiJOKQJIk2wK2sY5O3q2iHKxoFNk9hDH4wtO9W0CDELZo8+/kdzL2QJmGNCPAQrWIznBCOeN9VfBjEg9dq8nX65G0I60gVa0onlcNkApiW83DUq4jHEEFjvRdp2aHKK+ymiHy2T2RKYk1gEXoR3rr7W6wixKYPlab9O40dxFSPE3MSEBR8KIgMV+xvyNehtpMsymo/DmoTA88nsy+gl7DKRSmvCTZwjouayiBrBocLbqB/cOxZDui+hJGth6SVCqwpUwuufO0502Ns6zTCJVd9DTOtJ7pqer+zoZltYXpQhF3R86Sf0rYCNxepITF+Hoq70MZ0SIiWvyYGhHLj3LcjpRj;4:yLgNMMD2l9vuF/h57HDzpFYU1maFxwnXfLWzXJ0crhdVBgVn0A56Bg/brWmBOKMr2GeIwGp7mKfS6NKoYKLrxWn3Rx8z/AxGU7Hs2zJPyzRqqmhm1G+6AKH9KOw8Ta3hfPXUs4Nd8T4wOQx4gfA7RUXcSL01dqnfLuLNvxqcwsSpnw+Oyv3ki/gjVfAl6VhgZozuIdmJ5OVjv4++GBvcKFpO416Ku14MBbRHvXkgh6nkFG5vd2va7WYN8e+6KJoFkPvCgD1WBBg48QW3sngTLes7egFLZ/fKoL4ueM/G7yvz+VJgBky+8VG1Mu+EnhqItya4wm1esSwCZUrYpJVztt5Zyy7IVtWRqNp8XUsVQWhfFB5xTfd+nqiphl6dOHySE8ul/R+vFRgyxOZQ7F4gpA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(9101521026)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046);SRVR:BY2PR0201MB1783;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0201MB1783; X-Forefront-PRVS: 0923977CCA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(377454003)(24454002)(42186005)(189998001)(5004730100002)(36756003)(77096005)(66066001)(65806001)(83506001)(65956001)(76176999)(54356999)(87266999)(50986999)(65816999)(23676002)(47776003)(4001350100001)(5001770100001)(33656002)(107886002)(86362001)(59896002)(3846002)(6116002)(2906002)(81166005)(586003)(2950100001)(93886004)(50466002)(230700001)(5008740100001)(92566002)(1096002)(64126003);DIR:OUT;SFP:1102;SCL:1;SRVR:BY2PR0201MB1783;H:tpl2.home;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjAyMDFNQjE3ODM7MjM6Und5UElKTWpNaTMrU2ttSlRaaXhEZTJz?= =?utf-8?B?YXgycDVLajd0Z1dkVnE2cFRwMmNWLzJpNnVNOFVFUjBYWlAvSzZ0b0dBYjlq?= =?utf-8?B?cWx2RzhqSjZDNWJlMlhLT0R6K1BxeUdwU0RJV3VRem9uMEhJSW0vSUNIWW5D?= =?utf-8?B?VTc3WHdoRFZrZ01HMnh4eWFXSG8xLzM3czZxYkZvYWk5K3lYTnBzNDdHbmF6?= =?utf-8?B?QWk1VTYyVldDYWxUT1lEVmw2TnBCVWliZGJTUklHMWxUZWNBd1cyYWFlRkxC?= =?utf-8?B?aTVRWFpQaFdDZFg3aENnbzNQVnBRUGNNaTVjWlN6U3pzVFJ2VE13YlNYT1pr?= =?utf-8?B?L2Z1RFZxUGh2UzA5anBUWkQwRGF5NDZtOWRkc1k0d3U0TTJaaGsxbWRzVTZr?= =?utf-8?B?b2I3RmJ1VVRzeG51aUM3RExvVm5LaE9KN1pRL2xMQkEramY4ZVVTTUpHdHJ3?= =?utf-8?B?a2hDUTlDM2dBSlZCR3dJaTdGS2FpQVRxakxBSWR2VUJVU1F1Y0NWQThCSWxI?= =?utf-8?B?TEVJY0JOMHRRU1hnZ0QwdEVrUjBadUtqZDd1aTdiRWpsamt3Sm9FVFowWmNS?= =?utf-8?B?QkxBazVxdFl4SFFScS9ZRTA1REFqK2syYUE2V1g2eUV0OHc1RW9sckdVeFhI?= =?utf-8?B?cVJnaEhzRmdTWFRRdkJVLzNsd2plTDlZRm1mU1JrMDY0MHBvRzdVWno2NytW?= =?utf-8?B?Wk4zU2RhRVNZSlc4dHV5WkdidHViTkpGTXlNYU1ibDJnRUlnR295cFpaR2Ru?= =?utf-8?B?MU8xZllOTEtjS1MrQnFKMkdWT2dhdVQ3ZXNFUlVQNWQ1KzZubHN2ak5HeTdm?= =?utf-8?B?eEpHczNabXROZ1dlZ0pwSlZOSmF4ajNpaDFpVHhHYmVrSkpJWG5rcUdiUENY?= =?utf-8?B?SHU4b3hiSTFhZmphWjQvNWI2d21mbTVWcnJLQmN3dmh6ckpVdkpzY2x1RkFk?= =?utf-8?B?QTRoZCtUbndXOFJmT09nN0dzQ2FLWkxBYW1oR1o0Q1FXZmNOYXhYcVUvMmlJ?= =?utf-8?B?OWd5OUZETWpubkFDQnBDZkIyaW9pN1VjYmNReWt3bHdacXF1WFdXQlR0bUlY?= =?utf-8?B?NE5YdU9kemU2UGxHT1hmcERtVmJwdU53VWJQODFuWlNPdDBLQkNxTno3Mmds?= =?utf-8?B?Q3B0QWljTlNnVHcrbzR2eHB2ZnMzVVViY0QxNzAzVmc5eFVhNk5UUEFabUZn?= =?utf-8?B?OG9JNVpqSzcremNGZjFaUFdTdVlTZkRtYkU4bi9XOHlEMXBJSlREbGJXUWhz?= =?utf-8?B?c2lKZktOY24rbDZqa3ZwSGk3UmNkSmk4dHhoSzVZVTRLVFZUVXc0VFB5eTZ4?= =?utf-8?B?RWlzcVB1dzZFMW5JWnF4RDg5YzZzMlJzTjdabExNVnBWUFpSUVQrUEFsVDBH?= =?utf-8?B?dHNiQ3pRTUtvNGNjOGw5ejF1dGErK00wZk5jMTZSWEthakxwVmx3UHlsMUpa?= =?utf-8?Q?1/b5Oq2Y=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB1783;5:LAxvZOjkOxsnqIWjZSilwVcMj+qUJnwp4s3/qjAl0Jws2leNE2qpaChM8NOHcysUe+two+JRSKUqCUx16ruXSU0Z1hv4H3TY2IQK3bh3RYxoSxAlxycDDZshucDiA9IWxffBSL+yvaMYV6qB6Ygfh3zjt0aMtlNBfDZKVCSYk0Cr7EdEGaQ52AN7V/JGyf4T;24:ftrkTfHWjRiNcBWCFVqPJakW92p8cOwJ+JTrv0I98JQZufvq/XFn3yIb4Ga4D6yxK0sj95y9JayV8rG/cnTbT/z9GpI9xc5BEOkNkfalphw=;7:scNG8wlfdj8ABAtjkSTTzv3aCB91PXg9mvkfDRFZozqRmoauAFSP0Ja1OOUNTWcX8qWn4b7mE4vw8yQyU+gNmSwDgdJZ2VTEZHPCC4Xmv0lYosolSGRinguapA1rWuExnPuBuC9KMeVPQPEjmn/EWKzvvZcIqsRmbFrMPeucVsrwtGR8w8tSZY9B/KB0+k3clCx9OgfE++xxCPs9ybFXRGbkHPfoKdtTrIJOTtI7isM= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: zend.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2016 08:05:07.8428 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0201MB1783 Subject: Re: [PHP-DEV] [RFC] PHP Attributes From: dmitry@zend.com (Dmitry Stogov) On 04/24/2016 11:24 AM, Fleshgrinder wrote: > The invariant could also be added as an additional branch to the class > instead of a method, since it would not work like a method. > > class A {} invariant {} > > function f() {} require {} ensure {} > > This would also align nicely with closures and anonymous classes, which > is kind a problematic with annotations. > > $A = new class {} invariant {}; > > $f = function () {} require {} ensure {}; > > The only thing that remains that might be of interest to both is > `@throws` but that was not discussed at all as of yet. > > use Ns\SomeException; > > @throws SomeException > function f() { > > } > > This is at least how one would expect it to work and it is something > that should be covered by annotations and not as part of the language. > The ABNF should account for that: > > ANNOTATION = "@" NAME [ " " VALUE ] > NAME = STRING > VALUE = QUOTED-STRING / PHP-REFERENCE / EXPRESSION > QUOTED-STRING = ( "'" / DQUOTE ) STRING ( "'" / DQUOTE ) > EXPRESSION = PHP-CODE ";" > > Where PHP references are any of the already possible ones: > > use F\Q\C\N; > > @annotation \F\Q\C\N > @annotation N > @annotation \F\Q\C\N::CONSTANT > @annotation N::CONSTANT > @annotation \F\Q\C\N::function() > @annotation N::function() > @annotation \F\Q\C\N::$variable > @annotation N::$variable > > I also though some more about function support for annotations and this > would actually be a nice thing for userland. > > annotation deprecated(Reflection $element, string $message = '') { > @trigger_error($message, E_USER_DEPRECATED); > } > > @deprecated('because') > function x() {} > > @deprecated > function y() {} > > This would allow users to implement simple and easy reactive annotations > in userland. Even if this could or should be an extension of the feature > in the future, it should be thought about know. Simply because the > brackets make sense if such a feature is to be implemented. ;) > Looks interesting, but try to think where the "annotation deprecated" should be declared,to be visible in every compiled script, when the corresponding code should be called (in what context), what if we need to do something at compile-time? Single answers to these question are going to be great for "deprecated" use case, however they will limit usability for other cases. Thanks. Dmitry.