2012/4/14 Ralph Schindler <ra...@ralphschindler.com>:
> Hi all,
>
> There are many different use cases were in code we expect classes names as
> arguments to functions as fully qualified names.  We do this in ZF a lot
> with our Service Location and DI components, but also with our code
> reflection API, etc.  A more interesting use case I would like to call out
> is with PHPUnit, for example in a test, you might find this:
>
>  $mock = $this->getMock('A\Namespaced\ClassName');
>
> This becomes cumbersome when you are dealing with lots of strings about lots
> of class names.  This is also an area where, currently, namespace
> declaration and use statements offer no real support.
>
> The patch located here:
>
> https://github.com/ralphschindler/php-src/commit/02210d51851a96d723fbedcfc64cde9f9ae2b22a
>
> ... implements the ability for a developer to leverage the file's namespace
> declaration and use statements to be able to produce a scalar (string) of
> the class name that can be then used, for example, as an argument to a
> function elsewhere.
>
> This overloads the "class" keyword, and by virtue of the existing usage of
> "class" this feature is completely backwards compatible.  All existing tests
> pass.  For example, the above PHPUnit snipped would become:
>
>  use A\Namespaced\ClassName;
>  $mock = $this->getMock(ClassName::class);
>
> Another example with reflection:
>
>  use SomeOther\FullyNamespaced\ClassElsewhere as CE;
>  $r = new ReflectionClass(CE::class);
>
> More examples from the test file:
>
>  namespace Foo\Bar {
>    class Baz {}
>    var_dump(Moo::CLASS); // "Foo\Bar\Moo"
>  }
>
>  namespace {
>    use Bee\Bop as Moo,
>        Foo\Bar\Baz;
>
>    var_dump(Baz::class); // "Foo\Bar\Baz"
>    var_dump(Boo::class); // "Boo"
>    var_dump(Moo::CLASS); // "Bee\Bop"
>    var_dump(\Moo::Class); // "Moo"
>
>    $class = Baz::class; // assign class as scalar to var
>    $x = new $class;
>    var_dump($x);  object(Foo\Bar\Baz)#1 (0) {}
>  }
>
>
> What do you guys think?
>
> -ralph
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>

Hi, Ralph

I really like this feature in general.

One thing I personally dislike in this implementation is the
difference between CLASS and class ... One with and one without
namespaces ...
If we can unify that, this would be a great help in understanding that
feature in future and getting the difference while reading code.
And please don't forget: Code will be written once, maybe rewritten
some times, but it will be read way more times!

Bye
Simon

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to