PHP方法获取2种类型的对象
是否可以在方法函数中设置类似的内容PHP方法获取2种类型的对象,php,methods,arguments,Php,Methods,Arguments,是否可以在方法函数中设置类似的内容 class myClass{ public function myMethod($variable stdClass || otherClass){ } } 我想这样做,在我的myMethod中可以传递两种类型的对象,这在PHP中是可能的?您不需要设置类型,PHP允许您: class myClass { public function myMethod($variable) { } } 如果它必须是两种类型中的一种,您可以在方法内
class myClass{
public function myMethod($variable stdClass || otherClass){
}
}
我想这样做,在我的
myMethod
中可以传递两种类型的对象,这在PHP中是可能的?您不需要设置类型,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');
}
}
}
您不需要设置类型,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');
}
}
}
您不需要在方法定义中编写类型。您可以允许在PHP中使用任何类型的参数。如果要检查,您可以稍后执行以下操作:
public function myMethod($var) {
if(class_name($var) == "MyClass1") {
// do something
}
elseif(class_name($var) == "MyClass2") {
// do something elese
}
else {
// Error
}
}
您不需要在方法定义中编写类型。您可以允许在PHP中使用任何类型的参数。如果要检查,您可以稍后执行以下操作:
public function myMethod($var) {
if(class_name($var) == "MyClass1") {
// do something
}
elseif(class_name($var) == "MyClass2") {
// do something elese
}
else {
// Error
}
}
在PHP中,您不必使用精确的参数类型。这是一个名为的新功能,不需要使用它 您要做的唯一一件事就是处理这样一个事实:您的参数可以是一个类或另一个类的实例。您可以使用来检查它:
class myClass {
public function myMethod($param) {
if($param instanceof MyClass1){
}
else if($param instanceof MyClass2){
}
...
}
}
在PHP中,您不必使用精确的参数类型。这是一个名为的新功能,不需要使用它 您要做的唯一一件事就是处理这样一个事实:您的参数可以是一个类或另一个类的实例。您可以使用来检查它:
class myClass {
public function myMethod($param) {
if($param instanceof MyClass1){
}
else if($param instanceof MyClass2){
}
...
}
}
这是不可能的!您可以传递实现一个的对象,或者尝试使用模式,或者只传递变量
public function myMethod($var) {
if($var instanceof MyClass) {
}
}
这是不可能的!您可以传递实现一个的对象,或者尝试使用模式,或者只传递变量
public function myMethod($var) {
if($var instanceof MyClass) {
}
}
如果要控制输入参数,请改用接口或抽象类:
class MyClass {
public function doSomething(IExpectedObject $input)
{
...
}
}
interface IExpectedObject{}
class A implements IExpectedObject {}
class B implements IExpectedObject {}
class C {}
在这种情况下,类A和B将通过,而类C将失败,如果您的方法希望某种类型的对象以相同的方式处理它们,而不关心它是A还是B对象,那么这是有用的
这也可以通过继承完成,具体取决于您的需要。如果您想控制输入参数,请使用接口或抽象类:
class MyClass {
public function doSomething(IExpectedObject $input)
{
...
}
}
interface IExpectedObject{}
class A implements IExpectedObject {}
class B implements IExpectedObject {}
class C {}
在这种情况下,类A和B将通过,而类C将失败,如果您的方法希望某种类型的对象以相同的方式处理它们,而不关心它是A还是B对象,那么这是有用的
这也可以通过继承来实现,具体取决于您的需要。不需要在PHP中描述参数类型,为什么要这样做?我的理解是,您不必将特定类型作为参数传递。因为我不想做类似于公共函数myMethod($variable)的事情{if($variable instanceof stdClass){}if($variable instanceof otheClass){}}不需要在PHP中描述参数类型,为什么要这样做?我的理解是,您不必将特定类型作为参数传递。因为我不想做类似于公共函数myMethod($variable){if($variable instanceof stdClass){}if($variable instanceof otheClass){}}是的,我知道,但是我想避免stdClass的if$variable instanceof和otheClass的if$variable instanceof,而不是做些什么。我想在参数传递到方法体时检查对象的类型。目前还没有办法。即使类型搜索也不允许两个方法具有相同的名称,即使参数不同。您始终可以使用不同的设计模式来处理这种情况,但这始终是一样的:打开参数类。最干净的方法是使用接口,让两个类实现它,并通过声明参数是该接口的实例来使用类型暗示。但这是同一个IMO,我不知道这种模式,在两个类之间没有其他链接,只有被同一个方法作为参数。是的,我知道,但我想避免如果$variable instanceof stdClass,如果$variable instanceof otheClass,而不是做些什么。我想在参数传递到方法体时检查对象的类型。目前还没有办法。即使类型搜索也不允许两个方法具有相同的名称,即使参数不同。您始终可以使用不同的设计模式来处理这种情况,但这始终是一样的:打开参数类。最干净的方法是使用接口,让两个类实现它,并通过声明参数是该接口的实例来使用类型暗示。但这是同一个IMO,我不知道这种模式,两个类之间没有其他联系,只有被同一个方法作为参数。这真的是一个好的实践吗?在我看来,创建一个只用于声明参数类型的接口似乎有些过分。特别是如果两个类之间绝对没有函数链接。你会为你得到的每种类型的方法创建一个接口吗?正如我在回答中所说的,当方法处理它们而不关心它们的类时,使用接口是一个很好的实践。由于他在示例中使用了“stdClass”,我假设后面的对象需要特定的处理。在我看来,我看不出一个方法应该能够接受和处理任何给定给它的对象,当你用同一个方法处理多个对象类型时,应用相同的操作不是吗?“这两个类之间没有功能联系”,所以在这种情况下,为什么使用相同的处理方法(请原谅我的英语)是的,我同意你的看法,这种问题来自概念问题。如果相同的方法适用于两个类,那么这些类应该通过继承共享一些方法和属性。但我仍然认为肌酸