在PHP中调用类并传递构造函数参数

时间:2012-11-14 19:27:06

标签: php oop class function

我知道如何使用:

call_user_func_array(array($className, $methodName), array($_POST)) ;

调用我班级的函数并发送参数。

但是我怎样才能调用这个类并将它传递给__constructor?

我手动完成:

$myTable = new Supertable(array('columnA', 'columnB'), 5, 'Some string') ;

哪个会奏效。我需要用什么函数来实现类似于call_user_func_array的功能?

这是我正在做的事情的完整背景:

function __autoload($classname) {
    @include $classname.'.php' ;
}

$className = 'supertable' ;
$methodName = 'main' ;

if(class_exists($className, true)) {
    if(method_exists($className, $methodName)) {
        $reflection = new ReflectionMethod($className, $methodName) ;

        if($reflection->isPublic()){
            call_user_func_array(array($className, $methodName), array($_POST)) ;
        } elseif($reflection->isPrivate()) {
            echo '<span class="state">Private</span> method <span class="methodname">'.$methodName.'</span> can not be accessed directly.' ;
        } elseif($reflection->isProtected()) {
        echo '<span class="state">Protected</span> method <span class="methodname">'.$methodName.'</span> can not be accessed directly.' ;
        }

    } else {
        echo 'The method <span class="methodname">'.$methodName.'</span> does not exist.' ;
    }
} else {
    echo 'The class <span class="classname">'.$className.'</span> does not exist.' ;
}

2 个答案:

答案 0 :(得分:0)

在这里找到我自己的问题的答案:

How to call the constructor with call_user_func_array in PHP

作为参考,我改变了我的脚本:

function __autoload($classname)
{
    @include $classname.'.php' ;
}

$className = 'supertable' ;
$methodName = '' ;

if(class_exists($className, true))
{
if(method_exists($className, $methodName))
{
    $reflection = new ReflectionMethod($className, $methodName) ;

    if($reflection->isPublic())
    {
        call_user_func_array(array($className, $methodName), array($_POST)) ;
    }
    elseif($reflection->isPrivate())
    {
        echo '<span class="state">Private</span> method <span class="methodname">'.$methodName.'</span> can not be accessed directly.' ;
    }
    elseif($reflection->isProtected())
    {
        echo '<span class="state">Protected</span> method <span class="methodname">'.$methodName.'</span> can not be accessed directly.' ;
    }

} else {
    $reflect  = new ReflectionClass($className);
    $reflect->newInstanceArgs(array($_POST));
}
} else {
echo 'The class <span class="classname">'.$className.'</span> does not exist.' ;
}

因此,如果类存在但没有给出方法,则调用构造函数。

答案 1 :(得分:0)

如果完全你需要的是什么,我没有看到重点,原因有两个:

  1. 您可以通过这种方式轻松调用它:

    new $className($_POST);
    
  2. $_POST是一个超全球版(我确定你知道这一点)并不需要作为参数传递才能被访问。