Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:46668 Return-Path: <0xcafefeed@gmail.com> Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 51174 invoked from network); 13 Jan 2010 02:45:50 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 13 Jan 2010 02:45:50 -0000 Authentication-Results: pb1.pair.com smtp.mail=0xcafefeed@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=0xcafefeed@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.219.219 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: 0xcafefeed@gmail.com X-Host-Fingerprint: 209.85.219.219 mail-ew0-f219.google.com Received: from [209.85.219.219] ([209.85.219.219:36711] helo=mail-ew0-f219.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id FC/8F-06421-DD33D4B4 for ; Tue, 12 Jan 2010 21:45:50 -0500 Received: by ewy19 with SMTP id 19so16338215ewy.1 for ; Tue, 12 Jan 2010 18:45:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=oYgotHV76u/igbDjisGmmPBseYsoB2XpUT5/XJIKM70=; b=DpS8gOhcQD/devRLDZFPksv7gdDQzrV1YPd7gL1aWlN6RXEGQob4x6L7pS+ARFoWjS xKAYxoZnYvsYv1lO2T7Ms47ORYFMWGKd8Cm2iVVSMssCsqoFsL2uQNAAntNlLm+8O8h5 Z2wRwt1zXi3Lin0fvrY2TIXZR9eHoeUZOymmM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=XNLafb9X35hvHCEi1ebegZmJ7mWhvS57Foj12tyn1o2zzzW+fVZ1iJX1+i9e12JjnA nZ5tG29zXM7JqHrhQxy7LBJQJG3TMz2ucPAFdE05q9JZ+b6fWSsH7KLOxTfNOzZVXRH2 QhhhBl2VvLBGkMh/angnljTWW7m4t7BGTyI0o= MIME-Version: 1.0 Received: by 10.216.87.203 with SMTP id y53mr3376077wee.177.1263350745941; Tue, 12 Jan 2010 18:45:45 -0800 (PST) In-Reply-To: <68de37341001121829p3a2f6a62y6eb2a45863e62ae6@mail.gmail.com> References: <3A.94.26332.3E9EB4B4@pb1.pair.com> <68de37341001121810x10be424fu842402a398d3709e@mail.gmail.com> <68de37341001121829p3a2f6a62y6eb2a45863e62ae6@mail.gmail.com> Date: Tue, 12 Jan 2010 18:45:45 -0800 Message-ID: To: Eddie Drapkin Cc: Chris Stockton , internals@lists.php.net Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [PHP-DEV] __toString(), __toArray() From: 0xcafefeed@gmail.com (mm w) I am not forcing anything, it's already there, that's definitely a more useful magic, if people would add a new one, __cast is not critical, catchable objects are __catch even if exists, so my point I 'd rather see useful requests than a unseful one e.g __cast from my perspective __toString and __toArray , __callStatic should be removed __callStatic is definitly a mistake. On Tue, Jan 12, 2010 at 6:29 PM, Eddie Drapkin wrote: > What you're proposing is just forcing __call, _callStatic, __get and > __set into a single method, which does nothing to reduce the amount of > magic, only obfuscate it. =C2=A0And it certainly offers no alternative to > "__cast", at least not that I can see. > > On Tue, Jan 12, 2010 at 9:11 PM, mm w <0xcafefeed@gmail.com> wrote: >> the multiplication of magic, the pointed point, need to read more carefu= lly >> >> On Tue, Jan 12, 2010 at 6:10 PM, Eddie Drapkin wrot= e: >>> How does this have *anything* to do with the discussion at hand? >>> >>> On Tue, Jan 12, 2010 at 9:09 PM, mm w <0xcafefeed@gmail.com> wrote: >>>> don't worry it's only for people who are working with MVC and >>>> RootObject structure, there is too much magics already and __cast is >>>> not needed at all, >>>> as we cannot monkey patch to add an observer on itself, a nice >>>> solution should have a catchable object so __catch any calls >>>> >>>> function __catch($data, $type) { >>>> =C2=A0 =C2=A0if (method =3D=3D $type) { >>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (data[selector] =3D 'setValue' && obser= vedValueForKeyPath) { >>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 $this->_setValue(($data['arg= ']); >>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return; >>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 } >>>> =C2=A0 =C2=A0} >>>> =C2=A0 =C2=A0continue_natural_call(); >>>> } >>>> >>>> we could imagine to have a root-object-built-in-class that is >>>> naturally observable, or a root classObject at all, anyway it's only >>>> something for people who are doing OO programming, >>>> so don't worry >>>> >>>> On Tue, Jan 12, 2010 at 2:40 PM, Chris Stockton >>>> wrote: >>>>> Hello, >>>>> >>>>> On Mon, Jan 11, 2010 at 8:32 PM, mm w <0xcafefeed@gmail.com> wrote: >>>>>> cast is not needed in PHP >>>>>> >>>>>> i 'd rather be more interesting in >>>>>> >>>>>> class Obj { >>>>>> =C2=A0 =C2=A0 function __catch($data, $type) { >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0//$type [ static_method, me= thod, get_property, set_property] >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (observed && =C2=A0$type= =3D=3D set_property && somevalueIsObserved) { >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0$obser= ver->notify("somevalue::valueWillChanged"); >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0$this-= >somevalue =3D $data['somevalue']; >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0$obser= ver->notify("somevalue::valueDidChanged"); >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else { >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0contin= ue__call(); >>>>>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} >>>>>> =C2=A0 =C2=A0 } >>>>>> } >>>>> >>>>> What? ... >>>>> >>>>>>> Etienne Kneuss wrote: >>>>>>> This is where operator over-loading would be useful however perhaps= only >>>>>>> explicit casts would make sense here. >>>>> >>>>> I beleive adding a __cast(string $type) would be a useful feature for >>>>> me, very often I have a toArray method defined. I agree with you that >>>>> due to unexpected edge cases with operator precedence and general typ= e >>>>> juggling that __cast should only be called on explicit (cast). >>>>> >>>>> I.E.: >>>>> class Int { public function __cast($type) { return 'int' =3D=3D $type= ? 15 : 0; } } >>>>> $r =3D new Int; >>>>> >>>>> var_dump($r + 1); // 2 >>>>> var_dump((int) $r + 1); // 16 >>>>> var_dump((bool) $r + 1); // 1 >>>>> >>>> >>>> -- >>>> PHP Internals - PHP Runtime Development Mailing List >>>> To unsubscribe, visit: http://www.php.net/unsub.php >>>> >>>> >>> >> >