这是一个基本的PHP问题,以某种方式我找不到有关它的任何信息。
所以我想做的是将父类传递给函数,以便其所有子类也可以传递。
反正有做吗?
function transform(Fruit $fruit){}
transform($orange)
transform($apple)
更新 :
看来我需要显示更多情况。
所以我有一个变压器父母
class ResourceTransformer{
public function transform(ResourceModel $model){}
}
和它的孩子
class ColorTransformer extends ResourceTransformer{}
现在,我要做的是将ColorModel(资源模型的子级)传递给ColorTransformer。
class ColorModel extends ResourceModel{}
当我这样做时,它会引发如下错误:
Type error: Argument 1 passed to App\\Modules\\Product\\Transformer\\ResourcesTransformer::transform() must be an instance of App\\Modules\\Product\\Models\\ResourceModel, instance of App\\Modules\\Product\\Models\\ColorModel given.
因此,基本上,ColorTransformer不能接受ColorModel,而只能接受ResourceModel,而ColorModel是ResourceModel的子级。可能有些人可以给我更多启示。
我已经尝试过此代码来检查您的问题
class ResourceModel { }
class ResourceTransformer
{
public function transform(ResourceModel $model)
{
var_dump($model);
}
}
class ColorTransformer extends ResourceTransformer { }
class ColorModel extends ResourceModel { }
$transformer = new ColorTransformer();
$model = new ColorModel();
$transformer->transform($model);
而且我有正确的结果
object(ColorModel)#2(0){}
如果这在您的情况下不起作用,则看起来该类ResourceModel
是代码的这一部分
class ResourceTransformer{
public function transform(ResourceModel $model){}
}
与这部分不同
class ColorModel extends ResourceModel{}
你告诉在评论的问题是只与ColorModel
但你对错误的信息告诉我们,命名空间ResourceModel
和ColorModel
是相同的,所以我认为这个问题是与你的ResourceTransformer
类定义-你必须在你的文件的顶部这段代码的某处有这个定义?
use App\Modules\Product\Models\ResourceModel;
如果不这样做,那么您ResourceModel
在文件中的某个位置是否具有ResourceTransformer
类定义的类的另一个声明?
我在您的问题中看到的另一件事是代码的这一部分之间的区别
class ResourceTransformer{
public function transform(ResourceModel $model){}
}
和您的错误中的班级名称
类型错误:传递给App \ Modules \ Product \ Transformer \ ResourcesTransformer :: transform()的参数1必须是App \ Modules \ Product \ Models \ ResourceModel的实例,是给定的App \ Modules \ Product \ Models \ ColorModel的实例。
看错了,您有一个班级ResourcesTransformer
,您告诉我们该班级是ResourceTransformer
。如果这种差异没问题,那么您的问题应该放在带有ResourcesTransformer
类声明的文件中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句