Re: Execution order of PHP

From: Date: Wed, 10 Mar 2010 16:07:06 +0000
Subject: Re: Execution order of PHP
References: 1 2 3 4 5  Groups: php.general 
Request: Send a blank email to php-general+get-302666@lists.php.net to get a copy of this message
2010/3/10 Andrew Ballard <aballard@gmail.com>: > On Wed, Mar 10, 2010 at 9:54 AM, Bruno Fajardo <bsfajardo@gmail.com> wrote: > [snip] >> 2010/3/10 Auke van Slooten <auke@muze.nl>: >>> This is not what I meant. I should perhaps mention that it's an xml-rpc >>> client and the method calls are remote method calls. The multiCall method >>> gathers multiple method calls into a single request. >>> >>> The trick I'm using now is to set a private property in the $client->__get() >>> method when the property you're accessing is 'system'. From then untill >>> you >>> call the method 'multiCall', instead of calling the methods (in this case >>> methodOne and methodTwo) the client creates a new object with the call >>> information (method name and arguments) and returns that. In multiCall all >>> arguments are therefor call information objects and multicall creates a >>> single request based on that information. >> >> Hmm, you cleared that to me now... If you need to first create the >> property "system" and then call a method in that object "system", >> can't you do something like: >> >> $client->system = null; >> $client->system->multiCall( >>    $client->methodOne(), >>    $client->methodTwo() >> ); >> >> I'm not testing these snippets of code, so sorry if I'm getting something wrong. >> >> Cheers, >> Bruno. >> > [snip] > > I'm not sure you would want to assign null to $client->system. After > all, __set() might not be defined. Yes, you're right, Andrew. Setting the property to null is not the best choice in this case. > > I agree with Rob here. If order is really crucial, then call the > statements in the correct order: > > <?php > > /** >  * causes $client to call __get() in order to resolve >  * 'system' >  */ > $system = $client->system; > This was my point too, to create the object before the call to multiCall(), I just messed my example with the null assignment... :-) The code you suggested must solve the OP issue. Cheers, Bruno. > > /** >  * You should add some handling here to make sure that >  * $system is really an object that implements your >  * multiCall() method, and not something else (like null). >  */ > > > $system->multiCall( >    $client->methodOne(), >    $client->methodTwo() > ); > > ?> > > > > Andrew >

« previous php.general (#302666) next »