Edit report at http://bugs.php.net/bug.php?id=39340&edit=1

 ID:                 39340
 Updated by:         [email protected]
 Reported by:        thehub at lofty dot net dot au
 Summary:            "With" keyword
-Status:             Open
+Status:             Bogus
 Type:               Feature/Change Request
-Package:            Feature/Change Request
+Package:            *General Issues
 Operating System:   Windows XP
 PHP Version:        4.4.4
 Block user comment: N
 Private report:     N

 New Comment:

Adding such a thing was discuessed multiple times and always rejected.
Code like



$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();



can be written as





$t = &$server[$currServ][$currDB][$currGroup][$currUser];

$t['access']=4;

$t['email']='';

$t['lastlogin']=0;

$t['projects']=array()





without the need for a new construct.


Previous Comments:
------------------------------------------------------------------------
[2009-08-27 23:13:48] robeddielee at hotmail dot com

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.

------------------------------------------------------------------------
[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/bug.php?id=39340&edit=1

Reply via email to