gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:20:42 24 4
gpt4 key购买 nike

这是一个基本的 PHP 问题,不知何故我找不到任何关于它的信息。

所以我想做的是将一个父类传递给一个函数,这样它的所有子类也可以传递。

有什么办法吗?

function transform(Fruit $fruit){}

transform($orange)
transform($apple)

更新:

看来我需要更多地展示情况。

所以我有一个变压器父级

class ResourceTransformer{
public function transform(ResourceModel $model){}
}

和它的 child

class ColorTransformer extends ResourceTransformer{}

现在我要做的是将 ResourceModel 的子 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;

如果您不这样做,那么您是否在文件中的某处使用 ResourceTransformer 类定义对 ResourceModel 类进行了另一个声明?

我在你的问题中看到的另一件事是这部分代码之间的区别

class ResourceTransformer{
public function transform(ResourceModel $model){}
}

和你的错误中的类名

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.

看错了,你有一个类 ResourcesTransformer,你告诉我们这个类被命名为 ResourceTransformer。如果这种差异没问题,那么您的问题应该放在声明了 ResourcesTransformer 类的文件中。

关于php - 将父类作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com