有没有办法找出变量上放置了什么类型:
...function( IInterface $blah )
{
if( gettypehint( $blah ) == IInterface )
{
echo "yay";
}
}
我意识到在这种情况下这是毫无意义的,但这是为了简化问题。
编辑以帮助回答:
实际上问题是我正在实现一种工厂类。在那个工厂里,我需要知道扩展Factory的类的参数是什么。如果它是一个IInterface然后做一个新的ThingINeed,但如果它是IPoopy类型,那么我需要一个新的Poopy。之类的事情。
所以我在实现一个工厂类之后,根据实现工厂的类中声明的类型提示来决定需要实例化哪个类。
所以我的情况实际上就是这样:
public function AddBinding( $interface, $concrete )
{
$calledClass = get_called_class();
$class = new \ReflectionClass( $calledClass );
$method = $class->getMethod( "__construct" );
$params = $method->getParameters();
foreach( $params as $param )
{
if ( $param instanceof $interface )
{
return new $concrete();
}
}
}
参考:How to implement a factory class using PHP - Dependancy injection
答案 0 :(得分:1)
如...检查参数的实例?
instanceof
:http://www.php.net/manual/en/internals2.opcodes.instanceof.php
但是考虑到你已经假设你的参数NEEDS是一个instanceOf IInterface,如果PHP能够正常工作,那么双重检查可能有点奇怪。 除非我遗漏了什么。
答案 1 :(得分:1)
你的问题似乎很奇怪。可以使用ReflectionFunction
API解析:
function foo(StdClass $arg)
{
$function = new ReflectionFunction(__FUNCTION__);
$args = array_map(function($item)
{
return $item->getClass()->getName();
}, $function->getParameters());
//var_dump($args);
//so, if ($args[0]=='SomeNeededClass') { ... }
}
$obj = new StdClass();
foo($obj);
- 但是,实际上,我无法想象用例 - 因为,如果它是你的功能,你就会知道它的参数定义。