2011-09-02 71 views
2

我正在編寫一個PHP類。它的另一個類的實例Colour的一個實例的方法類型提示setColour()爲什麼PHP的類型暗示認爲我的類是一個字符串?

我這樣做:

$colour = new Colour($updates->colour); 
echo get_class($colour); 
$product->setColour($colour); 

正如我預料的那樣,get_class告訴我,$colourdomain\Colour一個實例,但後來我把它傳遞給setColour()時的錯誤:

Catchable fatal error: Argument 1 passed to domain\Product::setColour() must be an instance of domain\Colour, string given,…

Colour看起來是這樣的:

<?php 
namespace base\domain; 

/** 
* Represents a colour. 
* 
**/ 
class Colour extends \base\domain\Enum { 
const __default = self::NONE; 

const NONE = NULL; 
const BLACK = 'black'; 
const BLUE = 'blue'; 
const BRONZE = 'bronze'; 
const BROWN = 'brown'; 
const GOLD = 'gold'; 
const GREEN = 'green'; 
const GREY = 'grey'; 
const MULTICOLOURED = 'multicoloured'; 
const ORANGE = 'orange'; 
const PINK = 'pink'; 
const PURPLE = 'purple'; 
const RED = 'red'; 
const SILVER = 'silver'; 
const WHITE = 'white'; 
const YELLOW = 'yellow'; 

} // END class Colour 

Colour擴展了一個自定義Enum類型,該類型覆蓋__toString(),所以我認爲這可能會導致問題,但是當我刪除__toString()實現時不起作用。

任何想法,你可以提供將不勝感激。

+1

奇怪。你在字面代碼上面顯示的是什麼? –

+1

以及如果您執行'$ product-> setColour(new Color($ updates-> color));'? – pleasedontbelong

+2

發佈有問題的類,它會更容易幫助你出來 – Breezer

回答

2

我做一個測試,我看不出有任何問題:

<?php 

class Colour { 

    private $name; 

    public function __toString() { 
     return $this->name; 
    } 

    public function __construct($name) { 
     $this->name = $name; 
    } 

} 

class Product { 

    public $colour; 

    public function setColour(Colour $c) { 
     $this->colour = $c; 
    } 

} 

error_reporting(E_ALL); 
$product = new Product(); 
$colour = new Colour('red'); 
echo get_class($colour).' '; 
$product->setColour($colour); 
echo $product->colour; 
+0

謝謝@pinouchon。 你是對的,沒有任何問題! –

相關問題