[PHP-DEV] RFC question (Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously)
I would like to keep this as a RFC page in wiki.php.net. Are there any conventions or rules that I should keep in mind? (or just-not- supposed-to-do-that-because-your-proposal-is-stupid-and-will-never-be- accepted?) Moriyoshi On 2008/07/18, at 8:23, Moriyoshi Koizumi wrote: Hi, Attached are the patches that allow the use statement that was introduced with closures to appear within every function statement except method definitions. I think this feature is a good addition because it resolves inconsistency between closures and unticked functions. In a nutshell, ?php function foo() use ($some_globals) { echo $some_globals; } ? is equivalent to ?php function foo() { global $some_globals; echo $some_globals; } ? While, ?php function bar() { $some_local_var = ''; function fubar() use ($some_local_var) { echo $some_local_var; } } ? and ?php function bar() { function fubar() { global $some_local_var; echo $some_local_var; } } ? are of course not the same.php-ubiquitous-use-statement- HEAD-20080718.patch.diff.txtphp-ubiquitous-use-statement- PHP_5.3-20080718.patch.diff.txt Moriyoshi -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] RFC question (Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously)
On 23.07.2008, at 18:21, Moriyoshi Koizumi wrote: I would like to keep this as a RFC page in wiki.php.net. Are there any conventions or rules that I should keep in mind? (or just-not- supposed-to-do-that-because-your-proposal-is-stupid-and-will-never- be-accepted?) we have not really done any rules .. just common sense. if you create a new page in the rfc namespace, it already comes up with a template (though that template could use some tweaking). regards, Lukas Kahwe Smith [EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously
On 18.07.2008, at 01:23, Moriyoshi Koizumi wrote: Hi, Attached are the patches that allow the use statement that was introduced with closures to appear within every function statement except method definitions. I think this feature is a good addition because it resolves inconsistency between closures and unticked functions. In a nutshell, I talked to Johannes, given that the thread has not garned much attention (maybe with this reply this will change) and the fact that since quite some time we have instead tried to encourage people to leverage $GLOBALS instead, it does not seem like we need to squeeze this new syntax into 5.3 so shortly before the feature freeze (I guess you get what you deserve by allowing closures in so late before the feature freeze?). If we get feedback that end users that are new to PHP feel like they expect this syntax when they are exposed to closures we might want to add this in 5.4/6.0? regards, Lukas Kahwe Smith [EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously
On Thursday 17 July 2008 6:23:31 pm Moriyoshi Koizumi wrote: Hi, Attached are the patches that allow the use statement that was introduced with closures to appear within every function statement except method definitions. I think this feature is a good addition because it resolves inconsistency between closures and unticked functions. In a nutshell, ?php function foo() use ($some_globals) { echo $some_globals; } ? is equivalent to ?php function foo() { global $some_globals; echo $some_globals; } ? While, ?php function bar() { $some_local_var = ''; function fubar() use ($some_local_var) { echo $some_local_var; } } ? and ?php function bar() { function fubar() { global $some_local_var; echo $some_local_var; } } ? are of course not the same. Which is why I am not a fan of this syntax as proposed. You're using the same keyword to mean two different but very very close things. That's very confusing. It also means that you cannot take a global by value in a closure. Earlier the following was proposed: function foo($a, $b) global ($c, $d) { } $bar = new function($a, $b) use ($c, $d) global ($e, $f) { }; Which I think is much more self-explanatory, accomplishes the same goal, and still does not introduce any new keywords. (I still think lexical is better than use, and safe, but whatev. g) -- Larry Garfield [EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously
That's one of the motivations for the patch. I never liked the new syntax, but if it was given a go, it should also be made consistent with the another part of the syntax. Oh, I just got one important thing in mind to mention; test1.php: ?php function a() { $a = bar; include(test2.php); } $a = foo; a(); b(); ? test2.php: ?php function b() use ($a) { echo $a, \n; } b(); ? running test1.php ends up with two lines of bar, surprisingly. This is somewhat confusing, but surely one of the things that could not ever be done. This might be a great help when you use a PHP-script file as a mark-up template. Moriyoshi On 2008/07/18, at 15:10, Larry Garfield wrote: Which is why I am not a fan of this syntax as proposed. You're using the same keyword to mean two different but very very close things. That's very confusing. It also means that you cannot take a global by value in a closure. Earlier the following was proposed: function foo($a, $b) global ($c, $d) { } $bar = new function($a, $b) use ($c, $d) global ($e, $f) { }; Which I think is much more self-explanatory, accomplishes the same goal, and still does not introduce any new keywords. (I still think lexical is better than use, and safe, but whatev. g) -- Larry Garfield [EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously
2008/7/18 Moriyoshi Koizumi [EMAIL PROTECTED]: That's one of the motivations for the patch. I never liked the new syntax, but if it was given a go, it should also be made consistent with the another part of the syntax. Oh, I just got one important thing in mind to mention; test1.php: ?php function a() { $a = bar; include(test2.php); } $a = foo; a(); b(); ? test2.php: ?php function b() use ($a) { echo $a, \n; } b(); ? running test1.php ends up with two lines of bar, surprisingly. This is somewhat confusing, but surely one of the things that could not ever be done. This might be a great help when you use a PHP-script file as a mark-up template. Moriyoshi It was my understanding that include-d functions were added to the global scope (or I suppose the active namespace). So, in that context, function b() use($a) {} should be getting the $a from the global scope where $a == foo. I would say that getting 2 bars is wrong. Richard. -- - Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498r=213474731 Standing on the shoulders of some very clever giants!
Re: [PHP-DEV] [PATCH] Allow use($var..) statement ubiquitously
On 2008/07/18, at 19:06, Richard Quadling wrote: 2008/7/18 Moriyoshi Koizumi [EMAIL PROTECTED]: running test1.php ends up with two lines of bar, surprisingly. This is somewhat confusing, but surely one of the things that could not ever be done. This might be a great help when you use a PHP- script file as a mark-up template. Moriyoshi It was my understanding that include-d functions were added to the global scope (or I suppose the active namespace). So, in that context, function b() use($a) {} should be getting the $a from the global scope where $a == foo. I would say that getting 2 bars is wrong. Lexical scopes are completely irrelevant to which namespace the function belongs to. Moriyoshi -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php