rfc:batch_use_declarations

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:batch_use_declarations [2015/01/28 22:07] – typo marciorfc:batch_use_declarations [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== PHP RFC: Batch Use Declarations ====== +Moved to https://wiki.php.net/rfc/group_use_declarations
-  * Date: 2015-01-28 +
-  * Author: Márcio Almada, marcio.web2@gmail.com +
-  * Status: Draft +
-  * First Published at: http://wiki.php.net/rfc/batch_use_declarations +
-  * Patch: https://github.com/php/php-src/pull/1005 +
- +
-===== Introduction ===== +
- +
-This RFC represents an attempt to improve current PHP namespace implementation by introducing the concept of **Batch Use Declarations**: +
- +
-<code php> +
-// Proposed batch use syntax: +
- +
-use FooLibrary\Bar\Baz\Biz { ClassA, ClassB, ClassC, ClassD }; +
- +
-// Compared to current use syntax: +
- +
-use FooLibrary\Bar\Baz\Biz\ClassA; +
-use FooLibrary\Bar\Baz\Biz\ClassB; +
-use FooLibrary\Bar\Baz\Biz\ClassC; +
-use FooLibrary\Bar\Baz\Biz\ClassD; +
-</code> +
- +
-===== Proposal ===== +
- +
-Batch use declarations, also known as **grouped imports**, are just **syntax sugar** to cut verbosity when importing multiple entities from a common namespace. Using common PHP library examples, the following use declarations are equivalents: +
- +
-<code php> +
-// Current use syntax: +
- +
-use Doctrine\Common\Collections\Expr\Comparison; +
-use Doctrine\Common\Collections\Expr\Value; +
-use Doctrine\Common\Collections\Expr\CompositeExpression; +
- +
-// Proposed batch use syntax: +
- +
-use Doctrine\Common\Collections\Expr{ Comparison, Value, CompositeExpression }; +
-</code> +
- +
-=== Compound Namespaces === +
- +
-Compound namespaces are also allowed. For instance, the following use declarations are equivalents: +
- +
-<code php> +
-// Current use syntax: +
- +
-use Symfony\Component\Console\Helper\Table; +
-use Symfony\Component\Console\Input\ArrayInput; +
-use Symfony\Component\Console\Output\NullOutput; +
-use Symfony\Component\Console\Question\Question; +
-use Symfony\Component\Console\Input\InputInterface; +
-use Symfony\Component\Console\Output\OutputInterface; +
-use Symfony\Component\Console\Question\ChoiceQuestion; +
-use Symfony\Component\Console\Question\ConfirmationQuestion; +
- +
-// Proposed batch use syntax: +
- +
-use Symfony\Component\Console { +
-  Helper\Table, +
-  Input\ArrayInput, +
-  Input\InputInterface, +
-  Output\NullOutput, +
-  Output\OutputInterface, +
-  Question\Question, +
-  Question\ChoiceQuestion, +
-  Question\ConfirmationQuestion, +
-}; +
-</code> +
- +
-=== Mixed Use Declarations === +
- +
-Current namespace implementation does not allow mixed imports of functions, constants and classes. With the approval of this RFC, for completeness, the following hypothetical mixed imports would be possible: +
- +
-<code php> +
-use foo\math { const PI, function sen, function cos } +
-</code> +
- +
-===== About The Syntax Choice ===== +
- +
-The current choice for batch use syntax is basically a small variation from the current trait adaptation syntax: +
- +
-<code php> +
-use A, B { +
-    B::smallTalk insteadof A; +
-    A::bigTalk insteadof B; +
-+
-</code> +
- +
-Such design choice allows the feature to stay familiar and intuitive to most PHP user base. +
- +
-===== Optional: Nested Batch Use Declarations ===== +
- +
-**Nesting** would allow the following use case: +
- +
-<code php> +
-use Symfony\Component\Console { +
-  Helper\Table, +
-  Input { ArrayInput, InputInterface } +
-  Output { NullOutput, OutputInterface }, +
-  Question { Question, ChoiceQuestion, ConfirmationQuestion } +
-}; +
-</code> +
- +
-As the author of this RFC, I consider the **nesting** option **too complex** to be introduced. But since many people mentioned this **possibility**, it will be put into the discussion so the community has a chance to appoint. +
- +
-===== Backward Incompatible Changes ===== +
-There is no BC breaks with current implementation or feature concepts. +
- +
-===== Proposed PHP Version(s) ===== +
-This is proposed for the next PHP x, which at the time of this writing would be PHP 7.  +
- +
-===== RFC Impact ===== +
- +
-=== On Backward Compatibility === +
-This RFC is backwards compatible with previous PHP releases. +
- +
-===== Open Issues ===== +
- - Should nested batch use declarations be allowed? +
- +
-===== Unaffected PHP Functionality ===== +
-Original namespace implementation is not affected by the addition of batch use declarations. Current syntax would still be valid. +
- +
-===== Proposed Voting Choices ===== +
-As this RFC represents a language change a two third majority is required.  +
- +
-===== Patches and Tests ===== +
- +
-I created a PR so that the patch diff can be viewed easily: https://github.com/php/php-src/pull/1005 +
- +
-The current initial implementation can be found on my PHP fork: https://github.com/marcioAlmada/php-src/tree/batch-use +
- +
-You can also directly contribute to this RFC by sending a pull request to https://github.com/marcioAlmada/RFCs. +
- +
-===== References ===== +
- +
-There is no found record related to batch use declarations on mailing lists. +
- +
-==== Support in other languages ==== +
- +
-Other languages have similar ways to import multiple entities from a given package or module: +
- +
-- [[Rust Language|http://www.rust-lang.org ]] has a very similar sintax `use a::b::{c,d,e,f};+
-- [[Pyhon|https://www.python.org/]] has a different syntax but with the same objective: `from fibo import fib, fib2, fib3` +
- +
-===== Rejected Features ===== +
- +
-Awaiting discussion. +
rfc/batch_use_declarations.1422482868.txt.gz · Last modified: 2017/09/22 13:28 (external edit)