2013-02-13 2 views
4

Не вдаваясь в вопрос, следует ли мне использовать подсказку типа, может ли кто-нибудь сказать мне, есть ли способ избежать того, чтобы PHP выкидывал ошибку при передаче дочернего класса в конструктор, который набирает подсказки для родителя? Например:Родительский/дочерний тип, намекающий в php-конструкторе?

class Headed extends Image { ... } 

class Dimension { 
    function __construct(Image $image, $arg1, $arg2){ ... } 
} 

PHP дает мне:

PHP Error 4096: Argument 1 passed to Dimension::__construct() must be an instance of Image, instance of Headed given 

Объект типа Направился, очевидно, также будет изображением, так как дочерний класс, есть какой-то способ Перефразируя мой конструктор так что это дает тип подсказки, но позволяет детям?

Если это связано с использованием PHP 5.2.5 вместо более поздней версии, я сожалею о том, что беспокою всех.

+3

Проверьте свой код здесь: http://3v4l.org/. Он скажет вам, является ли это проблемой версии или нет. –

+0

Возможно, если у вас есть интерфейс, скажите «ImageInterface», где у вас есть класс Image, реализующий ImageInterface, таким образом вы намекаете вместо этого на изображение, но с ImageInterface? – Sarel

+2

Я использовал 3v4l.org, как @JohnConde, и он работает для меня: http://3v4l.org/30dkZ (на всех версиях PHP 5.x) – gd1

ответ

0

использование php 5.4.3

я запускаю этот код

<?php 

class Image { 
public $a="s"; 
}; 

class Headed extends Image { }; 

class Dimension { 
    function __construct(Image $image) 
    { 
     var_dump($image); 
    } 
}; 

$h = new Headed; 
$d = new Dimension($h); 

?> 

выход:

object(Headed)#1 (1) { ["a"]=> string(1) "s" } 
Смежные вопросы