Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 作为对象的力变量传递_Php_Oop_Object - Fatal编程技术网

Php 作为对象的力变量传递

Php 作为对象的力变量传递,php,oop,object,Php,Oop,Object,我需要将传递变量的类型定义为泛型对象,如何定义 尝试: public function set($service = null, (object) $instance) { [..] } 可以stdClass帮助吗?怎么做 谢谢 不,在php中,并非所有类都派生自公共祖先 因此,毫无疑问,您可以使用当前php的实现来声明“任何类的对象”不,对象必须是某个类。您可以将任何类名作为对象的类型 public function set($service = null, ClassName $i

我需要将传递变量的类型定义为泛型对象,如何定义

尝试:

public function set($service = null, (object) $instance) {
    [..]
}
可以
stdClass
帮助吗?怎么做


谢谢

不,在php中,并非所有类都派生自公共祖先


因此,毫无疑问,您可以使用当前php的实现来声明“任何类的对象”

不,对象必须是某个类。您可以将任何类名作为对象的类型

public function set($service = null, ClassName $instance) {
    //now the instance HAS to be the object of the class
}
或者一个基本的技巧是自己创建一个基本类

Class GenericObject {}
$myobj = new GenericObject();
$myobj -> myCustomVar = 'my custom var';

//Now send it
public function set($service = null, GenericObject $instance) {
   [...]
}
加布里埃尔

如果要检查变量是否为对象,可以执行以下操作:

public function set($service = null, $instance) {
    if (!is_object($instance)) return null; //or whatever
    [..]
}

你想用它来阻止什么?通过您的声明,如果变量不是对象,您将得到一个异常(它不会强制转换它)。

因此,只有在函数中使用
的解决方案才是对象。
?@Gabriel Santos:是的。或者,如果可以的话,只需创建接口并在每个必需的类中
实现它。谢谢你的帮助!我有一个“异常捕捉器”。我知道
set
函数中的
is_object
,但我想到了casts。@Gabriel Santos:确切地说,它与php中的“casts”无关,它被称为“type hinting”
函数集($service=null,(object)$instance)
casting
$instance
作为对象感谢您的示例,但是,它是针对服务定位器的,使用这种方法无法正常工作。