Hi! > (2) Add lexically-scoped variables, and allow normal global functions > to be closures. By this I mean we add something like JavaScript’s > `let` keyword that would make a variable that is unset when it falls > out of scope (end of a {} block, end of a file etc.). Then, we allow > normal functions to use the `use ($var)` syntax and close over > variables. That’d look something like this: > > <?php > let $x = 0; > function getCounter() use(&$x) { > return $x; > } > function incrementCounter() use(&$x) { > return $x++; > } > // since this is the end of the file, $x falls out of scope >
This looks like you're trying to create a class without calling it a class. Now, I agree that not everything should be a class. But what you're doing - set of functions linked by common behavior and sharing a common state - is a perfect fit for something classes and objects are used in PHP. So why not just use them instead of inventing creative ways of doing the same but in more complicated way? Moreover, since your example is clearly not a singleton - it is hard to imagine any program that would have use for just one counter but never any more - it is a classic example of something that should be an object. It might be a wrong example, but I have hard time seeing any example of something that has a group of functions, bound by common functionality, has a shared state and still should not and can not be expressed as a class/object. That's literally what they are made for. Now, utility classes do suck, but they suck not because they do what you described - on the contrary, they suck exactly because they are usually a bag of random, unrelated functions bound by nothing but the common trait of "we don't have other places to put them in". But for that, plain old functions work just fine in PHP. -- Stas Malyshev smalys...@gmail.com -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php