Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:92467 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 78126 invoked from network); 19 Apr 2016 14:49:04 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 19 Apr 2016 14:49:04 -0000 Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 157.56.110.104 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 157.56.110.104 mail-bn1bn0104.outbound.protection.outlook.com Received: from [157.56.110.104] ([157.56.110.104:60288] helo=na01-bn1-obe.outbound.protection.outlook.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id CE/F5-43496-D5546175 for ; Tue, 19 Apr 2016 10:49:03 -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=wyhU9jvhVU3P0GRneukVBFGeMv8LgsnHKw3mj5QOp6Y=; b=l9J+Cd7Qhp9wyNPiPfg15sWOmc94c/1oakYu/6GANSfIESjkS3i4YOqCvcJOteqBmOeB/Bg1+c5DkPccnhKzNjRVYeLiRyOhZivh7lNd4qrfv5tNmqpnJZpMCcWN1fQuIdnKyu2RJnWTNNVhy2k7IvAleq6S8HEkEfPEa4d7DUA= Authentication-Results: lists.php.net; dkim=none (message not signed) header.d=none;lists.php.net; dmarc=none action=none header.from=zend.com; Received: from tpl2.home (92.62.57.172) by SN1PR0201MB1789.namprd02.prod.outlook.com (10.162.228.19) with Microsoft SMTP Server (TLS) id 15.1.466.19; Tue, 19 Apr 2016 14:48:56 +0000 To: Rowan Collins , References: <5716310B.4060104@zend.com> <57163CB0.70608@zend.com> <5716410C.1080904@gmail.com> Message-ID: <57164550.7070008@zend.com> Date: Tue, 19 Apr 2016 17:48:48 +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: <5716410C.1080904@gmail.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [92.62.57.172] X-ClientProxiedBy: BY2PR21CA0013.namprd21.prod.outlook.com (10.162.74.151) To SN1PR0201MB1789.namprd02.prod.outlook.com (10.162.228.19) X-MS-Office365-Filtering-Correlation-Id: 17412423-f121-47f1-41aa-08d36861bc82 X-Microsoft-Exchange-Diagnostics: 1;SN1PR0201MB1789;2:niFhgEkktoljVU7kGi1lw1eo5fUbvmM8pnpOEfYar1/8WOjCnsIba4BuF2QWMWmiGWfVRoHATFUkSNPt2W62Tb/smwVKLokCf29Q///n71dGR6h1iT5+Pjxg/4H8c6vYPbwVv2chx6UhX4PGgjBWF3+CZsI2GhnzEj5EJ8QSse7F47dJS/Qa5HtSeHusmuKN;3:ZirAzruX5kVNJde9I2q1bITl9Tulk+33/0237kHqkTQHERF1kCiioUdeLEOD3I9GoRTpLYJs0zDTW1xjfQso5pMP0E9OvCZJoo1hJ47f+mUkn/KzQxUUVFDcnpH/MRdX;25:IIDsUpY+PpZs2FFtMOn65XSVEeeK7SOsnQxN8GvVCRWnTLbmf56wFN5gkCeuEIQ58AWsOTmOScXBGkFDErEAn4W89+iCa3g7h+7wbg2/Dzv2dhqIzu72y09bAVjuVSh79Pe2G4WtQQ75y8IZMhuQoHlA8l09Pe5j9bbeySYq9jIkdvA2xtU2SjVez1q0WWLPTsXdlHWSoFTl+jt2TWMHKCcQ5DqrCKe3N/kOId34jL0z1JorvgiVaRFR6Ixa9AFK3dMKgG/URq9HBYS0iB0QPVm3nF7QcFhtMqZGGrTM0yK5f+v9ULvG0H/yiActBb6R/Wgh63Qe9MFTnHm3hcowpQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0201MB1789; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0201MB1789;20:4mNNZE1nPj4SrtUBku/VZESFqzJlL32RlpgmPe6xtwtn4a/9HjoI0yHp+cw6FJy7REOle7NeS7eeqfzOn7psdZE3T7CdtFc3qlqIRsEgOHyOQl6Aw14dWuAtZCntKIt4mgeToQsi5ZR9tuKBG1cjtCCgCJkcBmHrvmRcT1iSjaq3b4W2WfyTT8zxajmDxiZrcaR9qvfV48gkL1AiKgLiYAaAXSp3auIuOnLW+fVH585NKJ4DHcvl1ypJpJ9Z2jQll2/F0OfyMyjqDwrubt6RT+sDNob9JdLOgbas6lo++kI6vVMQVinXKkfbHUKbKI8jGiicIu3AoJ/GRbSm0GGstQ86XwLw+3t+qZQCvFhulR235OrQAU+DL1jvolzAm3wIcBTrRc+5aQZx5c1efxX6i533MYckFgg7CGK0yrPlkER91HS7KcUs31abZvwD0M7DAWPJKaukhYdnzJSksvzq2v6gBJHlQuxRMmGZCjgfvuYtclLo7jgJl6QEDXFASPYk;4:S+saq5VZ8fPkZ8si4jY2Re4Fxmgrkb8kgUbo0z43OngH4J4pnA7yCqCktyOMnHJa9h6nQUbZztAxiY3e4XWw/nRjnr2/zWEYHH71ACk1LX17rShOqyjfneGXNQin4ZMZgZLJUSKGO9D0BAfb+3SLMLYHuMWYrj6L/4Ej7V2mje60ig46LbgtFSO4gfQZjVP0CxJ8TyBBKp5K1VGgaAheEnhQ7Wwbp7XjmUXCIxcGo2RSxYV6hKq8ZQELB5oYnPO41G+I4qvjW9QT7aDpR052qcA8SpzBLbB9Do8cBu40zwPfRRxThEyblOA52E/NepOZ48bNi+b7bbhnisRI4Wdo5s0UyZ3KvQijVi0thq2/VSmeXS+cNprqrTS6cSUqezGbFrnqLKL+8SPt28xT7G/YTg== 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)(10201501046)(3002001);SRVR:SN1PR0201MB1789;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0201MB1789; X-Forefront-PRVS: 0917DFAC67 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(377454003)(24454002)(47776003)(77096005)(92566002)(6116002)(86362001)(5008740100001)(3846002)(2950100001)(5001770100001)(586003)(66066001)(189998001)(107886002)(117636001)(15975445007)(23676002)(59896002)(65956001)(42186005)(93886004)(36756003)(54356999)(87266999)(99136001)(65816999)(50986999)(76176999)(1096002)(64126003)(2906002)(122286003)(81166005)(230700001)(83506001)(5004730100002)(19580395003)(50466002)(62816006);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR0201MB1789;H:tpl2.home;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjAyMDFNQjE3ODk7MjM6S282eW90RTZwcStxT0VFN0VSVDB6L205?= =?utf-8?B?N0x2cnRjMnErWFNLNkhsV0FrQlJUNjBvMnhiNzMrYU1xRzFvZ1ZrZUFOMkpz?= =?utf-8?B?blJUd2dvdTAyMm02alBSUTROamtnNjdSRXNJQkJsWEVLNnI1amd1U21wOFVs?= =?utf-8?B?V2NxQjVoVlU2bXJUU1R5dm45V3lJUklJd3gzN1l5eHp5SDdoMGNiVVcwYXdH?= =?utf-8?B?c1g0c3MrcDN6T1NuVmsxdG5jMXQ2cEVYdDdla1JoTUxhak1pbjdjallRNHJl?= =?utf-8?B?L1dIcjE3SXpWRjZGN3NJZkRGNUNHYWl0M05ZNDVlREJKS2xaV3JxaDNWTlBh?= =?utf-8?B?YmYweVpSQjNUdUgzUmRETGNXWFZoUmt4YitwWHN0bjA2WXV3THhIT0ZMdlN2?= =?utf-8?B?dnd3ajJUUXZxUElubU1uR0ZWMVVmRkI3ZTRKMGJabEtIalpHTTdrcDgycTgv?= =?utf-8?B?TVZUZTBJRDBWMzUyNkVhUXM2bklhc2xkSWlNVDZ3ZWdHK3p2MGtGT05BNi8z?= =?utf-8?B?RWpFMDRFb1NQNllPdFJna203UURSNUswQ2I3dFFIL2pnWlYzbGhxUzY4WG5j?= =?utf-8?B?SG1Lakg3L01NK2hsNFdPUXA1ZkpNQ2NsTGJnY0pRbVJGTG9Ea0wwNkRPaHNZ?= =?utf-8?B?RWltUTlkOEFDSit4UmhUbnpQR1dzR0E1QkR1OUQ4NWxzVzVHRkJvVmdaVTNr?= =?utf-8?B?ck04eHdUUU1DRHZJUy9ZMFlMQnpZV2pUcGQ3VUpUUFZ0UC9zQmZYdFozT1Vz?= =?utf-8?B?VGczY2FUNlVraTdjSkIvblV5anJCTUYvaHE4MlhlYzdpTWJsSzZmQnNsbXJx?= =?utf-8?B?SmlqTkprQlR6S1p1UmdtRy9EdEFZQ2h0cUd6ZVNRNUQ1b0NaRmNkNkpkYWpQ?= =?utf-8?B?S2FINHM4ZTNoVy9TeFc0NHhmeWlQeE5pb0ZZREFDTEViT3RoTFZNQXIzSTVy?= =?utf-8?B?SzlmUmk4ZkxFSTh6WmNGTEpIT0lyUGljaFZudkp4MjZIc25sdnB1SWNabDVB?= =?utf-8?B?TFcxeDZZeEtOR2Fqd0Nla0QxUjdpL1ZZdkswR2VFQjFaNEhZdENkZ3pWZjVV?= =?utf-8?B?VVVLcnpiMmxEbXkvU3Jxcm83QXhrYlVjR1BVenlzeU9ZT1RpMG1sQVliRW9y?= =?utf-8?B?TlFPWFpQbllxc2piemk2Z1VMMEpLZXB6WVNVb0JOcUVCQ2owb1I5QXllMmtQ?= =?utf-8?B?S3ZsSEh4WmwzRVZ6RmRrcnZIRzdKU2RlclVJL1JRNytMM3dNeVljZ3MxZDZn?= =?utf-8?B?OXFTSU1yejA5OCsvU3FPNWdpVndIVHRJQ1p1a0JuNDZkb2lWdGNWSzAvMERO?= =?utf-8?B?eXJ5cVJpNllramdIRFh5SVZCZkFSK3I0aWxZRFJ6S0MrdGVTZGR0Q0RyRmJU?= =?utf-8?B?c0tEanBWVlJ3YkMvbG1UL05PZlU2RTh0SGRCd0lIcjQxUzFWME5xSWI0V2NZ?= =?utf-8?B?YUlQQTRZYlErR2cza2cyNVI0ZDBwZEZQdlExU1pCS3ErbFJIeWZ2WThONXdN?= =?utf-8?Q?lT909LCiMK1xHvQv6biRtpRsIRQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0201MB1789;5:23TD5FE8G5yB+MXBI7RL0CqxFb8bJcknuUVrczVRxpbe6yVgg4w11azmHEUbXi7WcgP1Qzdb5X91fHQt/yX1HXEcXlPn9FhMPJDH6BbljIenckOsSCgp12drXCBUg/6wt+VE97fV6pPMZtFPjGrkAaC/PQzCnxXTjQlTKX3eaM0kHgwlRdT+r18weu8hTqjm;24:btTnNs/1AXOm/40XyojyptGMfe9vJr24r/HXdC4sXm1FSR2dboBl1QTpKXIZ5CMKR9oG3QUyH+Z2ILTELpZ0s9ufDxfVpad6wxPrlBfU4c0=;7:9MAp4uqVRr0tCIW8YUaziT51fmAyv0TJHRbnZ+clZyh+Bd5sH39JSU7exL9NPTIIhKAdIKt2I1lJnsb67VTP3LeJMA1MYXHUq/4nKVtEuqPyeUoNuOivmhFaKHenuArZjSZKPdlSq9BkeUe6h8KyxRMLWVLqIuFCH1vpFVDBQ1b8uHqdiXvg1sLZQRw9/9j2kJncNtHkp8RbXQzFAT4wzbOzC9iN0NYpHZhJeJ10MC0= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: zend.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2016 14:48:56.1422 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0201MB1789 Subject: Re: [PHP-DEV] RFC: Functional Interfaces From: dmitry@zend.com (Dmitry Stogov) On 04/19/2016 05:30 PM, Rowan Collins wrote: > Dmitry Stogov wrote on 19/04/2016 15:12: >> I prefer intuitive concepts, that I may use without rereading manual >> again and again. >> For this one, I even can't imagine a natural (not over-designed) use >> case. > > The use case that came to my mind is kind of the other way around from > "syntax sugar for anonymous classes" - providing a contract for what a > callback should look like. In essence, it's an alternative to > specifying closure type with a generic-like syntax, as proposed at > https://wiki.php.net/rfc/callable-types > > Say you currently have this: > > public function registerCallback(callable $callback) { ... } > > You could instead specify what the callback needs to accept and return: > > interface EventCallbackInterface { > public function __invoke(Event $event): boolean; > } > public function registerCallback(EventCallbackInterface $callback) { > ... } > > Using __invoke as the method name may or may not be a good idea, but > it interestingly means I don't need to change the code that runs the > callback, I can just use $callback($some_event); Then if someone wants > to use a complex object, they can; and if they just want to use a > closure, it has to meet the contract. callable-type is much simpler solution for this use-case. Usage of Interfaces to check function prototypes is a bit tricky, but yes, this is a possible use-case. Do you like to work with framework, that use this trick for every callback? Thanks. Dmitry. > > > Regards,