gpt4 book ai didi

php - 为函数中的参数设置多个实例类型

转载 作者:行者123 更新时间:2023-11-29 10:19:54 25 4
gpt4 key购买 nike

我已经对此进行了一些谷歌搜索,但似乎找不到太多帮助。但是,我想知道是否有一种方法可以检查函数中参数的多个实例类型,因此要检查它是否是用户模型的实例或另一个模型的实例,如果它是两者之一,则允许它通过。如果没有,则抛出错误。我正在使用 PHP 和 Laravel。

这里的用例是我要将数据库从 SQL 迁移到 Mongo,因此在过渡期间我将有两个用户模型(UserMongoUser)我想检查每个参数以确定参数是否是某种形式的 User 实例。

public function setTo(User $user)
{
$this->user()->associate($user);

return $this;
}

最后的手段,我可​​以复制这些功能,但这似乎是不必要的重复。我不想完全删除实例检查。

我想知道是否有办法实现这一目标?如果没有,我很想听听人们对处理这个问题的最佳方法的想法。

谢谢!

最佳答案

您可以执行以下操作:
让两个类(User 和 MongoUser)扩展一个基类(UserBase??)并检查它。

<?php

class base {
}

class A extends base {
}

class B extends base {
}

class C {
}

function test(base $x) {
var_dump($x);
}


test(new base()); // good
test(new A()); // good
test(new B()); // good
test(new C()); // throws error because class C doesn't extend base class

另一种可能性是忽略方法声明中的限制并进行手动测试:

public function setTo($user)
{
if($user instanceof User || $user instanceof MongoUser) {
echo "is an instance of User or MongoUser";
$this->user()->associate($user);

return $this;
} else {
// throw an erorr
}
}

关于php - 为函数中的参数设置多个实例类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490041/

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