PHP-如何检查没有参数构造函数的类?
在少数几个世界中:我想用PHP来完成这个任务 详细介绍:我有一个类a方法,它实例化了一个类X,可以是类B或类C 甲级 B类 C类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来进行检查,例如:
$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;
}
}
}
...
}