PHP-如何检查没有参数构造函数的类?

PHP-如何检查没有参数构造函数的类?,php,class,oop,arguments,Php,Class,Oop,Arguments,在少数几个世界中:我想用PHP来完成这个任务 详细介绍:我有一个类a方法,它实例化了一个类X,可以是类B或类C 甲级 B类 C类 有人知道答案吗?如果您想检查一个类是否有构造函数,并且该构造函数是否接受任何参数,那么您可以使用PHP来进行检查,例如: $reflector = new \ReflectionClass('SomeClass'); $constructor = $reflector->getConstructor(); if ($constructor &&

在少数几个世界中:我想用PHP来完成这个任务

详细介绍:我有一个类a方法,它实例化了一个类X,可以是类B或类C

甲级

B类

C类


有人知道答案吗?

如果您想检查一个类是否有构造函数,并且该构造函数是否接受任何参数,那么您可以使用PHP来进行检查,例如:

$reflector = new \ReflectionClass('SomeClass');

$constructor = $reflector->getConstructor();

if ($constructor && $constructor->getParameters()) {
    // Since your class needs $sub_page['data'] and
    // you already have this in your current scope
    $instance = $reflector->newInstanceArgs($sub_page['data']);
} else {
    $instance = new SomeClass;
}

顺便说一句,如果您有类似于其他类实例的类型提示依赖项,那么您可以找出依赖项是什么,也可以新建依赖类以作为参数传递。

基于@Alpha答案,我发现:

class A{

   ...

   protected function init(){
       if( !empty( $this->sub_pages ) ){
           foreach ( $this->sub_pages as $sub_page ){
               try {
                   $reflector = new \ReflectionClass( $class );
                   if (!$constructor = $reflector->getConstructor()) {
                       printf( "The Class '%s' has not got a constructor", $class );                
                   }else {
                        // has a constructor
                        if ( $paramsArray = $constructor->getParameters() ) {
                            new $class( $sub_page['data'] );
                        }else{
                            new $class();
                        }
                    }
                } catch ( \ReflectionException $e ) {
                    echo $e;
                }

         }
     }

     ...

}

重点是什么?当你遇到一个带参数的构造函数时,你会怎么做?你可以找出一个类构造函数是否有参数,但是你如何确定传递给它的参数?我更改代码以查看我想要的参数和位置。
class C extends D{
    public function __construct( $data ){ //<-- With arguments
        parent::__construct( $data );
    }    
}
$reflector = new \ReflectionClass('SomeClass');

$constructor = $reflector->getConstructor();

if ($constructor && $constructor->getParameters()) {
    // Since your class needs $sub_page['data'] and
    // you already have this in your current scope
    $instance = $reflector->newInstanceArgs($sub_page['data']);
} else {
    $instance = new SomeClass;
}
class A{

   ...

   protected function init(){
       if( !empty( $this->sub_pages ) ){
           foreach ( $this->sub_pages as $sub_page ){
               try {
                   $reflector = new \ReflectionClass( $class );
                   if (!$constructor = $reflector->getConstructor()) {
                       printf( "The Class '%s' has not got a constructor", $class );                
                   }else {
                        // has a constructor
                        if ( $paramsArray = $constructor->getParameters() ) {
                            new $class( $sub_page['data'] );
                        }else{
                            new $class();
                        }
                    }
                } catch ( \ReflectionException $e ) {
                    echo $e;
                }

         }
     }

     ...

}