Есть ли способ, чтобы выяснить, что typehinting было помещено на переменную:Выясните тип намекая переменной - PHP
...function(IInterface $blah)
{
if(gettypehint($blah) == IInterface)
{
echo "yay";
}
}
Я понимаю, что в данном контексте это не имеет смысла, но это, чтобы упростить вопрос.
Редактировать, чтобы помочь ответить на:
На самом деле проблема в том, что я реализую заводском вид класса. На этом заводе мне нужно знать, какие параметры были у класса, который расширяет завод. Если это 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
Не может быть http://www.php.net/manual/en/internals2.opcodes.instanceof.php или http://es1.php.net/function.get-class? –
afaik невозможно вызвать функцию с чем-то, что не вытекает из IInterface. try call ... function ("somethingNotfunction) - это вызовет ошибку ... – floww
Использовать' instanceof'? Он работает с интерфейсами, как показано в примере 4 здесь: http://www.php.net/manual/ ru/language.operators.type.php –