1

我知道如何使用:

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.' ;
}
4

2 回答 2

0

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

如何在 PHP 中使用 call_user_func_array 调用构造函数

作为参考,我改变了我的脚本,如下所示:

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.' ;
}

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

于 2012-11-14T19:53:36.003 回答
0

如果这正是您所需要的,我不明白这一点,原因有两个:

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

    new $className($_POST);
    
  2. $_POST是一个超全局的并且(我相信你知道这一点)不需要作为参数传递就可以访问。

于 2012-11-14T20:02:23.263 回答