Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42421 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 63365 invoked from network); 31 Dec 2008 16:41:14 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 31 Dec 2008 16:41:14 -0000 Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:55335] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 00/8C-01584-7A0AB594 for ; Wed, 31 Dec 2008 11:41:13 -0500 Received: from MBOERGER-ZRH.corp.google.com (229-122.107-92.cust.bluewin.ch [92.107.122.229]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id 3215411F1E4; Wed, 31 Dec 2008 17:41:08 +0100 (CET) Date: Wed, 31 Dec 2008 17:38:18 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <868073456.20081231173818@marcus-boerger.de> To: =?iso-8859-15?Q?David_Z=FClke?= CC: PHP Internals In-Reply-To: <08AA10DA-2704-415C-8A8C-893C89990DC1@bitextender.com> References: <08AA10DA-2704-415C-8A8C-893C89990DC1@bitextender.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------9DBA11BCCB9B45" Subject: [RFC] Re: [PHP-DEV] __invoke() weirdness From: helly@php.net (Marcus Boerger) ------------9DBA11BCCB9B45 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Hello David, Tuesday, December 23, 2008, 5:02:43 PM, you wrote: > Hi folks, > I played with __invoke today: > class Curry > { > protected $callable; > protected $args; > public static function create($callable) > { > $curry = new self($callable, array_slice(func_get_args(), 1)); > return $curry; > } > protected function __construct($callable, $args) > { > $this->callable = $callable; > $this->args = $args; > } > public function __invoke() > { > return call_user_func_array($this->callable, array_merge($this- >>args, func_get_args())); > } > } > However, it doesn't work consistently. > This works fine: > $d = new DateTime(); > $getAtom = Curry::create(array($d, 'format'), DATE_ATOM); > echo $getAtom(); > This gives a fatal "Call to undefined method DateTime::getAtom()" > $d = new DateTime(); > $d->getAtom = Curry::create(array($d, 'format'), DATE_ATOM); > echo $d->getAtom(); > Is that intentional? So far it is. Yet I as much as you do not like the inconsistency. So I spend a little bit on providing the following patch that should do what you were looking for. The disadvantage: Calling properties is case sensitive while calling methods isn't. But since this has nothign to do with this patch and the patch only increases consistency I am all for applying it. Comments? Lukas/Johannes? Oh I hate that case insensitivity.... and inconsistency.... > Cheers, > David Best regards, Marcus ------------9DBA11BCCB9B45 Content-Type: text/plain; name="ze2-callable-properties-5.3-20081231.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-5.3-20081231.diff.txt" SW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX29iamVjdF9oYW5kbGVycy5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjEzNS4yLjYuMi4yMi4yLjIzCmRpZmYgLXUgLXAgLWQg LXIxLjEzNS4yLjYuMi4yMi4yLjIzIHplbmRfb2JqZWN0X2hhbmRsZXJzLmMKLS0tIFplbmQv emVuZF9vYmplY3RfaGFuZGxlcnMuYwkzMSBEZWMgMjAwOCAxMToxNTozMiAtMDAwMAkxLjEz NS4yLjYuMi4yMi4yLjIzCisrKyBaZW5kL3plbmRfb2JqZWN0X2hhbmRsZXJzLmMJMzEgRGVj IDIwMDggMTY6MjY6NTIgLTAwMDAKQEAgLTc5MSw2ICs3OTEsMjIgQEAgc3RhdGljIHVuaW9u IF96ZW5kX2Z1bmN0aW9uICp6ZW5kX3N0ZF9nZQogCiAJem9iaiA9IFpfT0JKX1Aob2JqZWN0 KTsKIAlpZiAoemVuZF9oYXNoX2ZpbmQoJnpvYmotPmNlLT5mdW5jdGlvbl90YWJsZSwgbGNf bWV0aG9kX25hbWUsIG1ldGhvZF9sZW4rMSwgKHZvaWQgKiopJmZiYykgPT0gRkFJTFVSRSkg eworCQlpZiAoWl9PQkpfSFRfUFAob2JqZWN0X3B0ciktPnJlYWRfcHJvcGVydHkpIHsKKwkJ CXp2YWwgKmNhbGxhYmxlLCBwcm9wZXJ0eSwgKmNhbGxhYmxlX29iajsKKwkJCXplbmRfY2xh c3NfZW50cnkgKmNlX3B0cjsKKwkJCQorCQkJSU5JVF9QWlZBTCgmcHJvcGVydHkpOworCQkJ WlZBTF9TVFJJTkdMKCZwcm9wZXJ0eSwgbWV0aG9kX25hbWUsIG1ldGhvZF9sZW4sIDApOwor CQkJY2FsbGFibGUgPSBaX09CSl9IQU5ETEVSX1BQKG9iamVjdF9wdHIscmVhZF9wcm9wZXJ0 eSkoKm9iamVjdF9wdHIsICZwcm9wZXJ0eSwgQlBfVkFSX0lTIFRTUk1MU19DQyk7CisKKwkJ CWlmIChaX1RZUEVfUChjYWxsYWJsZSkgPT0gSVNfT0JKRUNUCisJCQkmJiBaX09CSl9IQU5E TEVSX1AoY2FsbGFibGUsIGdldF9jbG9zdXJlKQorCQkJJiYgWl9PQkpfSEFORExFUl9QKGNh bGxhYmxlLCBnZXRfY2xvc3VyZSkoY2FsbGFibGUsICZjZV9wdHIsICZmYmMsICZjYWxsYWJs ZV9vYmogVFNSTUxTX0NDKSA9PSBTVUNDRVNTKSB7CisJCQkJKm9iamVjdF9wdHIgPSBjYWxs YWJsZV9vYmo7CisJCQkJZnJlZV9hbGxvY2EobGNfbWV0aG9kX25hbWUsIHVzZV9oZWFwKTsK KwkJCQlyZXR1cm4gZmJjOworCQkJfQorCQl9IAogCQlmcmVlX2FsbG9jYShsY19tZXRob2Rf bmFtZSwgdXNlX2hlYXApOwogCQlpZiAoem9iai0+Y2UtPl9fY2FsbCkgewogCQkJemVuZF9p bnRlcm5hbF9mdW5jdGlvbiAqY2FsbF91c2VyX2NhbGwgPSBlbWFsbG9jKHNpemVvZih6ZW5k X2ludGVybmFsX2Z1bmN0aW9uKSk7CkluZGV4OiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDMzLnBo cHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9jbG9zdXJlXzAzMy5waHB0 CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAzMy5waHB0Ci0tLSAvZGV2L251bGwJMSBK YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9jbG9zdXJlXzAzMy5waHB0 CTMxIERlYyAyMDA4IDE2OjI2OjUyIC0wMDAwCkBAIC0wLDAgKzEsMzEgQEAKKy0tVEVTVC0t CitDbG9zdXJlIDAzMzogQ2FsbGluZyBwcm9wZXJ0eSBDbG9zdXJlCistLUZJTEUtLQorPD9w aHAKKworY2xhc3MgVGVzdCB7CisJcHVibGljICRmdW5jOworCWZ1bmN0aW9uIF9fY29uc3Ry dWN0KCkgeworCQkkdGhpcy0+ZnVuYyA9IGZ1bmN0aW9uKCkgeworCQkJZWNobyBfX01FVEhP RF9fIC4gIigpXG4iOworCQl9OworCX0KK30KKworJG8gPSBuZXcgVGVzdDsKK1JlZmxlY3Rp b25Qcm9wZXJ0eTo6ZXhwb3J0KCRvLCAnZnVuYycpOwordmFyX2R1bXAoJG8tPmZ1bmMpOwor JGYgPSAkby0+ZnVuYzsKKyRmKCk7Ciskby0+ZnVuYygpOworCis/PgorPT09RE9ORT09PQor LS1FWFBFQ1RGLS0KK1Byb3BlcnR5IFsgPGRlZmF1bHQ+IHB1YmxpYyAkZnVuYyBdCisKK29i amVjdChDbG9zdXJlKSMlZCAoMCkgeworfQorVGVzdDo6e2Nsb3N1cmV9KCkKK1Rlc3Q6Ontj bG9zdXJlfSgpCis9PT1ET05FPT09CkluZGV4OiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDM0LnBo cHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9jbG9zdXJlXzAzNC5waHB0 CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlXzAzNC5waHB0Ci0tLSAvZGV2L251bGwJMSBK YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9jbG9zdXJlXzAzNC5waHB0 CTMxIERlYyAyMDA4IDE2OjI2OjUyIC0wMDAwCkBAIC0wLDAgKzEsNDYgQEAKKy0tVEVTVC0t CitDbG9zdXJlIDAzNDogQ2FsbGluZyBwcm9wZXJ0eSBzdXBwb3J0aW5nIF9faW52b2tlCist LUZJTEUtLQorPD9waHAKKworY2xhc3MgQ3VycnkKK3sKKyAgcHJvdGVjdGVkICRjYWxsYWJs ZTsKKyAgcHJvdGVjdGVkICRhcmdzOworCisgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3Jl YXRlKCRjYWxsYWJsZSkKKyAgeworICAgICRjdXJyeSA9IG5ldyBzZWxmKCRjYWxsYWJsZSwg YXJyYXlfc2xpY2UoZnVuY19nZXRfYXJncygpLCAxKSk7CisgICAgcmV0dXJuICRjdXJyeTsK KyAgfQorCisgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY2FsbGFibGUsICRh cmdzKQorICB7CisgICAgJHRoaXMtPmNhbGxhYmxlID0gJGNhbGxhYmxlOworICAgICR0aGlz LT5hcmdzID0gJGFyZ3M7CisgIH0KKworICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoKQor ICB7CisgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCR0aGlzLT5jYWxsYWJsZSwg YXJyYXlfbWVyZ2UoJHRoaXMtPmFyZ3MsIGZ1bmNfZ2V0X2FyZ3MoKSkpOworICB9Cit9CisK KyRkID0gbmV3IERhdGVUaW1lKCk7CiskZ2V0QXRvbSA9IEN1cnJ5OjpjcmVhdGUoYXJyYXko JGQsICdmb3JtYXQnKSwgREFURV9BVE9NKTsKK3Zhcl9kdW1wKGlzX0NhbGxhYmxlKCRnZXRB dG9tKSk7Cit2YXJfZHVtcCgkZ2V0QXRvbSgpKTsKKworJGQgPSBuZXcgRGF0ZVRpbWUoKTsK KyRkLT5nZXRBdG9tID0gQ3Vycnk6OmNyZWF0ZShhcnJheSgkZCwgJ2Zvcm1hdCcpLCBEQVRF X0FUT00pOwordmFyX2R1bXAoaXNfQ2FsbGFibGUoJGQtPmdldEF0b20pKTsKK3Zhcl9kdW1w KCRkLT5nZXRBdG9tKCkpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK2Jvb2wo dHJ1ZSkKK3N0cmluZyglZCkgIjIlZC0lZC0lZFQlZDolZDolZCVzIgorYm9vbCh0cnVlKQor c3RyaW5nKCVkKSAiMiVkLSVkLSVkVCVkOiVkOiVkJXMiCis9PT1ET05FPT09Cg== ------------9DBA11BCCB9B45--