将父类作为参数传递给函数

迪马斯·萨特里奥(Dimas Satrio)

这是一个基本的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但你对错误的信息告诉我们,命名空间ResourceModelColorModel是相同的,所以我认为这个问题是与你的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章