2017-09-14 22 views
1

我想建立下面的代碼,但我不明白如何定義實例變量,因爲它是一個對象如何創建一個在PHP中創建多個不同抽象類的實例的函數?

function getInstance($productName) 
{ 

    switch ($Name) { 
     case Name1: 
      $instance = new Class1(); 
      break; 
     case Name2: 
      $instance = new Class2(); 
      break; 
     case Name3: 
      $instance = new Class3(); 
      break; 

     default: 
      break; 
    } 

    return $instance; 
} 
+0

您可以創建name => classname值的數組,然後使用$ Name獲取匹配的類名,然後使用$ instance = new $ classname; – flauntster

+0

你能否更詳細地解釋你的問題,因爲現在的問題還不清楚。 – Neodan

+0

我創建了一個文件,其中根據不同產品的類型(即我的數據庫)定義了不同的類。所以,我有4個不同的類對應於4個不同的類別。我想寫一個函數,它創建每個類的實例。但是,我不知道如何在switch語句 –

回答

0

只是把它定義爲null。你也可以在$productName不在列表中的情況下拋出異常。

例子:

<?php 

class Class1 {} 
class Class2 {} 
class Class3 {} 

function getInstance($productName) 
{ 
    $instance = null; 
    switch ($productName) { 
     case "Name1": 
      $instance = new Class1(); 
      break; 
     case "Name2": 
      $instance = new Class2(); 
      break; 
     case "Name3": 
      $instance = new Class3(); 
      break; 

     default: 
      throw new \Exception("Unknown type ($productName)!"); 
      break; 
    } 

    return $instance; 
} 

echo get_class(getInstance("Name1")); 
+0

我實現了它,但它返回null而不是對象 –

+0

如果請求一個沒有在其中描述的對象,getInstance()必須返回'null'。如果您不知道您必須創建什麼對象,則無法獲取對象。 ( - ; – Neodan

+0

我使用了getInstance('Name1')。是不是正確? –

0

我覺得這可能會幫助你..雖然我並不清楚你的製作實例,但你可以將其定義爲空。

function getInstance($productName) 
{ 
    $instance = null; 

    switch ($productName) { // $Name should be productName 
     case Name1: 
      $instance = new Class1(); 
      break; 
     case Name2: 
      $instance = new Class2(); 
      break; 
     case Name3: 
      $instance = new Class3(); 
      break; 

     default: 
      break; 
    } 

    return $instance; 
} 
0
  1. 瞭解如何使用反射
  2. 閱讀它在PHP http://php.net/manual/en/class.reflectionclass.php如何工作

這將解決您的問題。

<?php 
function getInstance($productName){ 
    $productToClass=["product1"=>"class1","product2"=>"class2","product3"=>"class3"]; 
    return new ReflectionClass('Object\'.$productToClass[$productName]); 
} 

?> 
+0

我得到了以下錯誤:解析錯誤:語法錯誤,意外的''對象\'$ productToClass [$ pro'( T_ENCAPSED_AND_WHITESPACE) –

相關問題