Почему подсказка типа PHP считает мой класс строкой? - PullRequest
2 голосов
/ 02 сентября 2011

Я работаю над классом PHP, который я написал. Его setColour() метод намекает на экземпляр другого моего класса, Colour.

Я делаю это:

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

Как и следовало ожидать, get_class говорит мне, что $colour является экземпляром domain\Colour, но я получаю сообщение об ошибке при передаче его на setColour():

Исправляемая фатальная ошибка: аргумент 1, переданный в домен \ Product :: setColour (), должен быть экземпляром домена \ Color, заданная строка,…

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 Ответ

2 голосов
/ 02 сентября 2011

Я делаю тест, не вижу проблем:

<?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;
...