PHP方法获得2种类型的对象

时间:2013-11-29 14:55:05

标签: php methods arguments

是否可以在方法函数中设置类似这样的

class myClass{

 public function myMethod($variable stdClass || otherClass){
 }

}

我想做点什么,进入我的myMethod可以在PHP中传递两种类型的对象吗?

5 个答案:

答案 0 :(得分:3)

如果您想控制输入参数,请改用Interface或抽象类:

class MyClass {

    public function doSomething(IExpectedObject $input)
    {
        ...
    }

}

interface IExpectedObject{}

class A implements IExpectedObject {}
class B implements IExpectedObject {}
class C {}

在这种情况下,A类和A类B将通过而C将失败,如果您的方法期望某种类型的对象以相同的方式处理它们而不关心它是A还是B对象,这可能是有用的。

根据您的需要,这也可以通过继承来完成。

答案 1 :(得分:2)

PHP中没有精确的参数类型。这是一项名为Type Hinting的新功能,无需使用它。

你唯一要做的就是处理你的参数可以是一个或另一个类的实例的事实。您可以使用instanceof进行检查:

class myClass {
    public function myMethod($param) {
        if($param instanceof MyClass1){
        }
        else if($param instanceof MyClass2){
        }
        ...
    }
}

答案 2 :(得分:0)

您不需要设置类型,PHP允许您:

class myClass {
    public function myMethod($variable) {

    }
}

如果它必须是两种类型之一,您可以在方法内部检查它,并添加一个PHPDoc块来告诉读者$variable可能是什么类型:

class myClass {

    /**
     * @param stdClass|myClass $variable
     *
     * @throws InvalidArgumentException in case $variable is not one of the above classes.
     */
    public function myMethod($variable) {
        if (!($variable instanceof stdClass || $variable instanceof myClass)) {
            throw new InvalidArgumentException('$variable must be either an stdClass or myClass');
        }

    }

}

答案 3 :(得分:0)

这是不可能的!您可以传递实现一个interface的对象或尝试使用模式factory method或只是传递变量

 public function myMethod($var) {
    if($var instanceof MyClass) {

    }
 }

答案 4 :(得分:-1)

您无需在方法定义中编写类型。您可以在PHP中允许任何类型的参数。如果你想检查,你可以稍后这样:

public function myMethod($var) {
    if(class_name($var) == "MyClass1") { 
        // do something
    } 
    elseif(class_name($var) == "MyClass2") { 
        // do something elese
    } 
    else { 
        // Error
    }
}