我正在编写一个我写的PHP类。它的setColour()
方法类型提示我的另一个类的实例Colour
。
我这样做:
$colour = new Colour($updates->colour);
echo get_class($colour);
$product->setColour($colour);
正如我所料,get_class告诉我$colour
是domain\Colour
的一个实例,但在将其传递给setColour()
时我收到错误:
捕获致命错误:传递给域\产品:: setColour()的参数1必须是域\颜色,给定字符串的实例,...
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()
实施时却没有帮助
您可以提供的任何想法都将非常感激。
答案 0 :(得分: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;