为啥 PHP 的类型提示认为我的类是字符串?
Posted
技术标签:
【中文标题】为啥 PHP 的类型提示认为我的类是字符串?【英文标题】:Why Does PHP's Type Hinting Think My Class is a String?为什么 PHP 的类型提示认为我的类是字符串? 【发布时间】:2011-11-08 23:37:17 【问题描述】:我正在编写我编写的 php 类。它的setColour()
方法类型提示我的另一个类的实例,Colour
。
我正在这样做:
$colour = new Colour($updates->colour);
echo get_class($colour);
$product->setColour($colour);
正如我所料,get_class 告诉我$colour
是domain\Colour
的一个实例,但是当我将它传递给setColour()
时出现错误:
可捕获的致命错误:传递给 domain\Product::setColour() 的参数 1 必须是 domain\Colour 的实例,给定字符串,...
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()
实现时没有帮助。
您能提供的任何想法将不胜感激。
【问题讨论】:
很奇怪。你在文字代码上面显示的是什么? 如果你这样做会发生什么$product->setColour(new Colour($updates->colour));
??
发布有问题的课程,这样会更容易帮助你
这对我来说很好,没有收到警告。 (sn-p:pastebin.com/uh7DrFJE)。你用的是哪个版本?
你能展示一下Colour
类的样子吗?
【参考方案1】:
我做个测试,没发现问题:
<?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;
【讨论】:
谢谢@pinouchon。你完全正确,没有任何问题!以上是关于为啥 PHP 的类型提示认为我的类是字符串?的主要内容,如果未能解决你的问题,请参考以下文章