2013-06-20 32 views
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 
     } 

    } 
} 
+1

出可以在界面上輸入提示'函數__construct(電源$ powerObj)' – Orangepill

回答

2

怎麼樣instanceof運營商http://php.net/manual/en/language.operators.type.php

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

而且,因爲一切都共享一個通用的接口。您可以typehint說:

function __construct(Power $powerObj) { 
     //Do stuff 
} 
+1

該死... 1)由於某種原因,我思想instanceof沒有在接口上工作,並且2)我認爲提示接口的類型也不起作用。 '敲着鍵盤上的頭'。當我讓情況變得複雜時,我絕對喜歡。我從別的東西上思考了一下,這就是爲什麼(我猜)我開始走下那條黑暗的黑暗之路。 –

1

您可以在界面上做類型提示,但...在你的榜樣

function __construct(Power $powerObj) { 

} 
+0

是的,你說得對+1。 – hek2mgl

0

您可以使用is_a()這一點。根本不需要反思。 is_a()作品以檢查對象的父類以及實現的接口:

interface A { 
} 

class B implements A { 
} 


$b = new B(); 
var_dump(is_a($b, 'A')); // bool(true)