Bug #55268 [Bgs]: Traits cannot be used as function/method typehints
| From: | php-bugs at majkl578 dot cz | Date: | Fri, 22 Jul 2011 19:05:28 +0000 |
| Subject: | Bug #55268 [Bgs]: Traits cannot be used as function/method typehints | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-162113@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=55268&edit=1
ID: 55268
User updated by: php-bugs at majkl578 dot cz
Reported by: php-bugs at majkl578 dot cz
Summary: Traits cannot be used as function/method typehints
Status: Bogus
Type: Bug
Package: Class/Object related
Operating System: Irrelevant
PHP Version: 5.4SVN-2011-07-22 (snap)
Block user comment: N
Private report: N
New Comment:
Maybe the example was too brief.
1. It was intended to work the same way as interfaces do: function foo(SomeInterface $foo) where
$foo must be any class implementing SomeInterface or any of its subclass.
2. Obviously, it was empty just to make the code short.
3. I know it's just a code snippet, but it'd be still useful for cases mentioned above.
Previous Comments:
------------------------------------------------------------------------
[2011-07-22 14:36:10] rasmus@php.net
Three things I don't understand here.
1. $obj is clearly an instance of Bar, even if the type-hint worked, it wouldn't
be of type Foo
2. An empty trait makes no sense. This is a NOP.
3. A trait is not a type in any way. It is just a code snippet.
------------------------------------------------------------------------
[2011-07-22 14:22:27] php-bugs at majkl578 dot cz
Description:
------------
It is not possible to use trait as a typehint in function declaration.
Use case: Extending few different classes to use a trait in them where these classes doesn't
have same parent. Then I want to specify typehint, because I require some methods which are declared
by that trait.
Test script:
---------------
trait Foo
{}
class Bar {
use Foo;
}
function test(Foo $obj) {
echo 'hello';
}
test(new Bar);
Expected result:
----------------
hello
Actual result:
--------------
Catchable fatal error: Argument 1 passed to test() must be an instance of Foo, instance of Bar
given...
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=55268&edit=1