gpt4 book ai didi

php - 类型提示 : method should accept any $arg that is an object

转载 作者:可可西里 更新时间:2023-11-01 00:11:24 25 4
gpt4 key购买 nike

我有一个“集合”类,它有一个添加方法。 add 方法应该只接受对象。所以这是期望的行为:

$x=5;//arbitrary non-object
$obj=new Foo; //arbitrary object

$collection=new Collection;
$collection->add($obj); //should be acceptable arg, no matter the actual class
$collection->add($x); //should throw an error because $x is not an object

根据 PHP 手册,可以通过在 $arg 前面加上类名来键入提示方法。因为所有 PHP 类都是 stdClass 的子类,所以我认为这个方法签名会起作用:

public function add(stdClass $obj);

但它失败了“参数必须是 stdClass 的一个实例”。

如果我将签名更改为我定义的父类,那么它将起作用:

class Collection {
public function add(Base $obj){
//do stuff
}
}

$collection->add($foo); //$foo is class Foo which is an extension of Base

有谁知道如何为通用对象键入提示?

最佳答案

与 Java 的 Object 类不同,PHP 没有对象的基类。对象不继承 stdClass:它是默认对象实现,而不是基类。因此,不幸的是,您不能为 PHP 中的所有对象键入提示。你必须做类似的事情:

class MyClass {
public function myFunc($object) {
if (!is_object($object))
throw new InvalidArgumentException(__CLASS__.'::'.__METHOD__.' expects parameter 1 to be object");
}
}

幸运的是,PHP 已经为此目的定义了 InvalidArgumentException 类。

关于php - 类型提示 : method should accept any $arg that is an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4218693/

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