ID: 39340 Comment by: robeddielee at hotmail dot com Reported By: thehub at lofty dot net dot au Status: Open Bug Type: Feature/Change Request Operating System: Windows XP PHP Version: 4.4.4 New Comment:
One interesting use for this would be as an alternative to the convention of using method chaining with setters. For example: $definition->addField(new StringField('username')) ->setRequired(true) ->setReadonly(true); Is becoming a popular convention, but requires all your setters to return $this, which I personally dislike, and this pattern cannot be used with existing APIs such as PEAR modules. Using the with statement, would facilitate the method chaining setters pattern without requiring hacks to your APIs. For example: with ($definition->addField(new StringField('username'))) { ->setRequired(true); ->setReadonly(true); } This would require only that addField return the added object, which is more palatable to me compared to all setters returning $this. Previous Comments: ------------------------------------------------------------------------ [2008-04-09 07:38:20] ois at oisnot dot com <pre><?php $currServ = 'test1'; $currDB = 'test2'; $currGroup = 'test3'; $currUser = 'test4'; $server = array(); $server[$currServ][$currDB][$currGroup][$currUser]['access']=4; $server[$currServ][$currDB][$currGroup][$currUser]['email']=''; $server[$currServ][$currDB][$currGroup][$currUser]['lastlogin']=0; $server[$currServ][$currDB][$currGroup][$currUser]['projects']=array(); var_export($server); unset($server); $server = array(); $server[$currServ][$currDB][$currGroup][$currUser] =array(); $server_curr =& $server[$currServ][$currDB][$currGroup][$currUser]; $server_curr['access']=4; $server_curr['email'] =''; $server_curr['lastlogin']=0; $server_curr['projects']=array(); var_export($server); unset($server); unset($server_curr); $server = array(); $server_curr = array(); $server_curr['access']=4; $server_curr['email'] =''; $server_curr['lastlogin']=0; $server_curr['projects']=array(); $server[$currServ][$currDB][$currGroup][$currUser] = $server_curr; var_export($server); ?></pre> Anyway, use objects. ------------------------------------------------------------------------ [2007-01-08 19:12:24] thehub at lofty dot net dot au or perhaps for a long piece of code that would be used a lot. this ugly rectangle of code for example: $server[$currServ][$currDB][$currGroup][$currUser]['access']=4; $server[$currServ][$currDB][$currGroup][$currUser]['email']=''; $server[$currServ][$currDB][$currGroup][$currUser]['lastlogin']=0; $server[$currServ][$currDB][$currGroup][$currUser]['projects']=array(); becomes with($server[$currServ][$currDB][$currGroup][$currUser]){ $['access']=4; $['email']=''; $['lastlogin']=0; $['projects']=array() } kind of like a function that's created on the fly and then destroyed when it's finished ------------------------------------------------------------------------ [2006-11-02 02:34:22] thehub at lofty dot net dot au Description: ------------ Visual Basic has a neat little code trick that I'd like to see in PHP... With object1 .property1="value" .function1() End With And it can be nested. This is useful if you don't want to create a variable to hold the return of, e.g. a function call that returns an array, when you only need it for two or three lines. Reproduce code: --------------- with($nested_array['a_very_long_key']){ $[0]='apples'; with(function1($[1]->data)) echo template($['title'],$['content']); } // or with $object1: with $->property1: function1($['key_of_property1']); endwith endwith ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39340&edit=1