Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:23341 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 58142 invoked by uid 1010); 14 May 2006 09:05:20 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 58127 invoked from network); 14 May 2006 09:05:20 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 14 May 2006 09:05:20 -0000 X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 81.169.182.136 ajaxatwork.net Linux 2.4/2.6 Received: from ([81.169.182.136:50053] helo=strato.aixcept.de) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 60/65-19568-DC2F6644 for ; Sun, 14 May 2006 05:05:18 -0400 Received: from baumbart.mbo (dslb-084-063-021-090.pools.arcor-ip.net [84.63.21.90]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by strato.aixcept.de (Postfix) with ESMTP id BAAD235C1EC; Sun, 14 May 2006 11:05:13 +0200 (CEST) Date: Sun, 14 May 2006 11:05:29 +0200 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <36828701.20060514110529@marcus-boerger.de> To: Jason Garber Cc: internals@lists.php.net In-Reply-To: <837405862.20060513223403@ionzoft.com> References: <785810036.20060511193536@ionzoft.com> <44647B7A.2070301@php.net> <932738738.20060513112734@marcus-boerger.de> <837405862.20060513223403@ionzoft.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------821BCBD23EA5E8F" Subject: Re: [PHP-DEV] private, protected, readonly, public From: helly@php.net (Marcus Boerger) ------------821BCBD23EA5E8F Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello Jason, Sunday, May 14, 2006, 4:34:03 AM, you wrote: > Hello Marcus, > class x > { > public readonly $xyz; > protected readonly $abc; > } > Definitions: > - public readonly - outside class can only read, not write. > - protected readonly - subclass can only read, not write. > - private readonly - does not make sense - do not support. > How difficult would it be to build this into the PHP engine? > -- > Best regards, > Jason mailto:jason@ionzoft.com > Saturday, May 13, 2006, 5:27:34 AM, you wrote: MB>> Hello Etienne, MB>> Friday, May 12, 2006, 2:11:38 PM, you wrote: >>> Hi, >>> my 2c: >>> 1) it shouldn't replace the visibility definition: we could also have >>> protected readonly properties. MB>> same here visibility and read/write control are two seperate things. >>> 3) how would you check if the property if readonly ? Trying it could >>> result to a Fatal error as you wanted. You would then need a >>> isReadonly() method/function: the function call wouldn't be spared. MB>> We could add this to reflection api easily. Here's your diff to play around :-) The impact on runtime is a single additional integer check for protected properties and an additional check for private proeprties where property access would normally fail. For this 5 minute patch i chose the key word 'readonly' as supposed. Actually writing the mail took much longer than brewing the patch and yes i din't care for syntax right now. php -r 'class T{private readonly $x = 42;} $obj = new T; var_dump($obj->x);' int(42) Or readable: x); ?> As we have the 'Property overloading RFC' on the 6.0 aganda we should probably move part of the stuff to 5.2 already and start with the public read access. http://oss.backendmedia.com/PhP60 http://www.zend.com/zend/week/week248.php#Heading3 Best regards, Marcus ------------821BCBD23EA5E8F Content-Type: text/plain; name="ze2-readonly_properties-20060514.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-readonly_properties-20060514.diff.txt" SW5kZXg6IFplbmQvemVuZF9jb21waWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Jl cG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9jb21waWxlLmgsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMzE2LjIuOC4yLjIKZGlmZiAtdSAtcCAtZCAtcjEuMzE2LjIuOC4yLjIgemVuZF9j b21waWxlLmgKLS0tIFplbmQvemVuZF9jb21waWxlLmgJMTEgTWF5IDIwMDYgMjE6MDc6Mzkg LTAwMDAJMS4zMTYuMi44LjIuMgorKysgWmVuZC96ZW5kX2NvbXBpbGUuaAkxNCBNYXkgMjAw NiAwODo1ODo0NiAtMDAwMApAQCAtMTM5LDYgKzEzOSw5IEBAIHR5cGVkZWYgc3RydWN0IF96 ZW5kX3RyeV9jYXRjaF9lbGVtZW50IHsKIC8qIGRlcHJlY2F0aW9uIGZsYWcgKi8KICNkZWZp bmUgWkVORF9BQ0NfREVQUkVDQVRFRCAweDQwMDAwCiAKKy8qIHByb3BlcnR5IGhhbmRsaW5n IGNvbnRyb2wgKi8KKyNkZWZpbmUgWkVORF9BQ0NfUFVCX1JFQUQgICAweDgwMDAwCisKIGNo YXIgKnplbmRfdmlzaWJpbGl0eV9zdHJpbmcoemVuZF91aW50IGZuX2ZsYWdzKTsKIAogCklu ZGV4OiBaZW5kL3plbmRfbGFuZ3VhZ2VfcGFyc2VyLnkKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9sYW5ndWFnZV9wYXJzZXIueSx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xNjAuMi40LjIuMQpkaWZmIC11IC1wIC1kIC1yMS4xNjAu Mi40LjIuMSB6ZW5kX2xhbmd1YWdlX3BhcnNlci55Ci0tLSBaZW5kL3plbmRfbGFuZ3VhZ2Vf cGFyc2VyLnkJMTEgTWF5IDIwMDYgMjE6MDc6MzkgLTAwMDAJMS4xNjAuMi40LjIuMQorKysg WmVuZC96ZW5kX2xhbmd1YWdlX3BhcnNlci55CTE0IE1heSAyMDA2IDA4OjU4OjQ2IC0wMDAw CkBAIC0xMTUsNyArMTE1LDcgQEAKICV0b2tlbiBUX1RIUk9XCiAldG9rZW4gVF9VU0UKICV0 b2tlbiBUX0dMT0JBTAotJXJpZ2h0IFRfU1RBVElDIFRfQUJTVFJBQ1QgVF9GSU5BTCBUX1BS SVZBVEUgVF9QUk9URUNURUQgVF9QVUJMSUMKKyVyaWdodCBUX1NUQVRJQyBUX0FCU1RSQUNU IFRfRklOQUwgVF9QUklWQVRFIFRfUFJPVEVDVEVEIFRfUFVCTElDIFRfUkVBRE9OTFkKICV0 b2tlbiBUX1ZBUgogJXRva2VuIFRfVU5TRVQKICV0b2tlbiBUX0lTU0VUCkBAIC01MDAsOCAr NTAwLDkgQEAgbWV0aG9kX2JvZHk6CiA7CiAKIHZhcmlhYmxlX21vZGlmaWVyczoKLQkJbm9u X2VtcHR5X21lbWJlcl9tb2RpZmllcnMJCXsgJCQgPSAkMTsgfQotCXwJVF9WQVIJCQkJCQkJ eyBaX0xWQUwoJCQudS5jb25zdGFudCkgPSBaRU5EX0FDQ19QVUJMSUM7IH0KKwkJbm9uX2Vt cHR5X21lbWJlcl9tb2RpZmllcnMJCQkJeyAkJCA9ICQxOyB9CisJfAlub25fZW1wdHlfbWVt YmVyX21vZGlmaWVycyBUX1JFQURPTkxZCXsgJCQgPSAkMTsgWl9MVkFMKCQkLnUuY29uc3Rh bnQpIHw9IFpFTkRfQUNDX1BVQl9SRUFEOyB9CisJfAlUX1ZBUgkJCQkJCQkJCXsgWl9MVkFM KCQkLnUuY29uc3RhbnQpID0gWkVORF9BQ0NfUFVCTElDOyB9CiA7CiAKIG1ldGhvZF9tb2Rp ZmllcnM6CkluZGV4OiBaZW5kL3plbmRfbGFuZ3VhZ2Vfc2Nhbm5lci5sCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfbGFuZ3VhZ2Vfc2Nh bm5lci5sLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzMS4yLjExCmRpZmYgLXUgLXAgLWQg LXIxLjEzMS4yLjExIHplbmRfbGFuZ3VhZ2Vfc2Nhbm5lci5sCi0tLSBaZW5kL3plbmRfbGFu Z3VhZ2Vfc2Nhbm5lci5sCTEzIEFwciAyMDA2IDEzOjQ4OjI4IC0wMDAwCTEuMTMxLjIuMTEK KysrIFplbmQvemVuZF9sYW5ndWFnZV9zY2FubmVyLmwJMTQgTWF5IDIwMDYgMDg6NTg6NDYg LTAwMDAKQEAgLTEwNjMsNiArMTA2MywxMCBAQCBORVdMSU5FICgiXHIifCJcbiJ8IlxyXG4i KQogCXJldHVybiBUX1BVQkxJQzsKIH0KIAorPFNUX0lOX1NDUklQVElORz4icmVhZG9ubHki IHsKKwlyZXR1cm4gVF9SRUFET05MWTsKK30KKwogPFNUX0lOX1NDUklQVElORz4idW5zZXQi IHsKIAlyZXR1cm4gVF9VTlNFVDsKIH0KSW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxl cnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96 ZW5kX29iamVjdF9oYW5kbGVycy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNS4yLjYu Mi4yCmRpZmYgLXUgLXAgLWQgLXIxLjEzNS4yLjYuMi4yIHplbmRfb2JqZWN0X2hhbmRsZXJz LmMKLS0tIFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwkxMCBNYXkgMjAwNiAyMToxMjo0 OCAtMDAwMAkxLjEzNS4yLjYuMi4yCisrKyBaZW5kL3plbmRfb2JqZWN0X2hhbmRsZXJzLmMJ MTQgTWF5IDIwMDYgMDg6NTg6NDcgLTAwMDAKQEAgLTE1MCw5ICsxNTAsOSBAQCBzdGF0aWMg aW50IHplbmRfdmVyaWZ5X3Byb3BlcnR5X2FjY2Vzcyh6CiAJCWNhc2UgWkVORF9BQ0NfUFVC TElDOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgWkVORF9BQ0NfUFJPVEVDVEVEOgotCQkJcmV0 dXJuIHplbmRfY2hlY2tfcHJvdGVjdGVkKGNlLCBFRyhzY29wZSkpOworCQkJcmV0dXJuIChw cm9wZXJ0eV9pbmZvLT5mbGFncyAmIFpFTkRfQUNDX1BVQl9SRUFEKSA/IDEgOiB6ZW5kX2No ZWNrX3Byb3RlY3RlZChjZSwgRUcoc2NvcGUpKTsKIAkJY2FzZSBaRU5EX0FDQ19QUklWQVRF OgotCQkJaWYgKGNlPT1FRyhzY29wZSkgJiYgRUcoc2NvcGUpKSB7CisJCQlpZiAoKGNlID09 IEVHKHNjb3BlKSAmJiBjZSkgfHwgKHByb3BlcnR5X2luZm8tPmZsYWdzICYgWkVORF9BQ0Nf UFVCX1JFQUQpKSB7CiAJCQkJcmV0dXJuIDE7CiAJCQl9IGVsc2UgewogCQkJCXJldHVybiAw Owo= ------------821BCBD23EA5E8F--