Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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_Constructor - Fatal编程技术网

Php 获取类构造函数

Php 获取类构造函数,php,constructor,Php,Constructor,如何在不实例化类的情况下获取类构造函数函数名 例如: $class = 'someClass'; $constructor = somehow get constructor; $args = array(); $object = call_user_func_array(array($class,$constructor),$args); 我需要的是通过将数量不确定的变量传递给对象的构造函数来创建对象。PHP中构造函数的函数名始终是_构造,因此您已经拥有了它,而无需做任何事情。PHP中构造

如何在不实例化类的情况下获取类构造函数函数名

例如:

$class = 'someClass';
$constructor = somehow get constructor;

$args = array();
$object = call_user_func_array(array($class,$constructor),$args);

我需要的是通过将数量不确定的变量传递给对象的构造函数来创建对象。

PHP中构造函数的函数名始终是_构造,因此您已经拥有了它,而无需做任何事情。

PHP中构造函数的函数名始终是_构造,因此,您已经拥有了它,而无需执行任何操作。

您可以通过以下方式完成此操作:

您可以通过以下方式执行此操作:


如果这个类有自己的类名的构造函数呢?@Yuri:你是什么意思?构造函数的名称将始终为_construct,但为了调用它,您需要使用new ClassName@哦,我不知道@这样我就可以毫无例外地做这件事了?调用_user_func_arrayarray$class、“_构造”、$args@NullUserException:没有。它已从PHP5.3.3中删除,但仅在名称空间中删除。在名称空间之外,构造函数的类名形式仍然有效。否,因为_构造不是声明为静态的。唯一的方法是调用new或使用ReflectionClass类…如果该类有自己的类名的构造函数呢?@Yuri:你是什么意思?构造函数的名称将始终为_construct,但为了调用它,您需要使用new ClassName@哦,我不知道@这样我就可以毫无例外地做这件事了?调用_user_func_arrayarray$class、“_构造”、$args@NullUserException:没有。它已从PHP5.3.3中删除,但仅在名称空间中删除。在名称空间之外,构造函数的类名形式仍然有效。否,因为_构造不是声明为静态的。唯一的方法是调用new或使用ReflectionClass类…如果所讨论的类没有构造函数怎么办?找到了解决方案:$object=null====$class->getConstructor$class->newInstance:$class->newInstanceArgsarray1,2,3;对不起,我出去了,错过了你的评论。为了完整起见,我将把它添加到答案中。旁注。哦,谢谢戈登。我不知道。我将更新答案-最好确保这样一个可能破坏性的更改获得尽可能多的可见性。如果所讨论的类没有构造函数,该怎么办?找到了解决方案:$object=null===$class->getConstructor$class->newInstance:$class->newInstanceArgsarray1,2,3;对不起,我出去了,错过了你的评论。为了完整起见,我将把它添加到答案中。旁注。哦,谢谢戈登。我不知道。我会更新答案——这可能是一个好主意,以确保一个潜在的破坏性的变化,如获得尽可能多的能见度。
<?php

class Pants
{
    public function __construct($a, $b, $c)
    {
        $this->a = $a;
        $this->b = $b;
        $this->c = $c;
    }
}

$className = 'pants';
$class = new ReflectionClass($className);
$obj = $class->newInstanceArgs(array(1, 2, 3));
var_dump($obj);
<?php
class Pants {
    function Pants($a, $b, $c) { ... }
}
$object = null === $class->getConstructor() 
    ? $class->newInstance()
    : $class->newInstanceArgs($args)
;