1

所以我的理解是我不能键入提示可能传递给一个类的多个对象。所以我想我可以利用反射 api 来解决这个问题。也许一般来说这是不好的做法,但事实就是如此。无论如何,这里基本上是我的布局。如果不使用反射类,是否有任何类型提示多个类的方法?这是处理这种情况的好方法吗?

interface Power { }

class mPower implements Power { }

class cPower implements Power { }

class Model extends ApiModel {

    function __construct(stdClass $powerObj) {

         $po = new ReflectionClass($powerObj);      
         if ( in_array('Power', $po->getInterfaceNames()))  {
            // do something
         }

    }
}
4

3 回答 3

2

instanceof运营商怎么样http://php.net/manual/en/language.operators.type.php

function __construct($powerObj) {
    if($powerObj instanceof Power) {
        //Do stuff
    }
}

此外,由于一切都共享一个通用接口。您可以输入提示:

function __construct(Power $powerObj) {
        //Do stuff
}
于 2013-06-20T18:20:53.103 回答
1

您可以在界面上进行类型提示...在您的示例中

function __construct(Power $powerObj) {

}
于 2013-06-20T18:22:17.720 回答
0

你可以用is_a()这个。完全不需要反思。is_a()用于检查对象的父类以及实现的接口:

interface A {
}

class B implements A {
}


$b = new B();
var_dump(is_a($b, 'A')); // bool(true)
于 2013-06-20T18:22:56.593 回答