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

dab 发布于 2019-02-11 class 最后更新 2019-02-11 21:14 7 浏览

我知道如何使用:

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.' ;
}
已邀请:

eomnis

赞同来自:

在这里找到我自己的问题的答案: 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.' ;
}
因此,如果类存在但没有给出方法,则调用构造函数。

sit_in

赞同来自:

如果这正是你所需要的,我没有看到重点,原因有二:

  1. 您可以通过以下方式轻松调用它:
    new $className($_POST);
    
  2. $_POST是一个超全局,(我相信你知道这一点)不需要作为参数传递才能被访问。