Hi, Internals,
Thanks, Marco and also to Rowans, Josh, David and Tyson I'll use IIFE in order to avoid global conflicts. Regards ---- En lun, 10 ago 2020 02:16:06 +0200 Marco Pivetta <ocram...@gmail.com> escribió ---- > Hey Manuel, > > > > > On Sun, Aug 9, 2020, 11:02 Manuel Canga <p...@manuelcanga.dev> wrote: > > > Hi Internals, > > > > I'd like to open up a discussion around the implementation of a new > > functionality: 'import of variables'. > > > > This functionality would allow to create a new 'use vars' keyword in > > order to can use( or cannot use ) global variables in local scope( of > > current file ). > > > > I think the best is a example: > > > > ```php > > <?php > > > > $a = 1; > > $b = 2; > > $c = 3; > > > > include __DIR__.'/without_import.php'; > > include __DIR__.'/all_import.php'; > > include __DIR__.'/none_import.php'; > > include __DIR__.'/some_vars.php'; > > include __DIR__.'/global_in_function.php'; > > ``` > > > > ## without_import.php > > > > ```php > > <?php > > > > echo $a; //1 > > echo $b; //2 > > $c = 'any value'; //replace value in global var > > ``` > > > > ## all import.php > > > > ```php > > <?php > > > > use vars all; > > > > echo $a; //1 > > echo $b; //2 > > $c = 'other value'; //replace value in global var > > ``` > > > > ## none_import.php > > > > ```php > > <?php > > > > use vars none; > > > > echo $a; //Warning: undefined var $a > > echo $b; //Warning: undefined var $b > > $c = 'other value'; //assign value to local var > > ``` > > > > > > ## some_vars.php > > > > ```php > > <?php > > > > use vars $a, $c, $d; //Warning: undefined var $d > > > > echo $a; //1 > > echo $b; //Warning: undefined var $b > > $c = 'a value'; //replace value in global var > > ``` > > > > ## global_in_function.php > > > > ```php > > <?php > > > > use vars $a, $c; > > > > > > function hello() { > > global $a, $b, $c; > > > > echo $a; //1 > > echo $b; //null. > > $c = 'end value'; //replace value in global var > > } > > > > hello(); > > ``` > > > > > > In a project with a lot of global vars( like WordPress ) this > > functionality avoids conflicts and easy replacements of values in main > > global vars. > > > > This looks like what IIFE do already (you can use them today): > > ```php > > require 'something/with/side/effects.php'; > > (static function () use ($a, $b, & $c) : void { > echo $a; //1 > echo $b; //Warning: undefined var $b > $c = 'a value'; //replace value in global var > })(); > ``` > > You can use this right now, and it has the advantage of reporting any > missing symbols right at the time at which the closure is declared. > > I tend to use IIFE all the time in procedural code, since they prevent > leaking state into globals 👍 > > > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php