我知道如何使用:
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.' ;
}
答案 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)
如果完全你需要的是什么,我没有看到重点,原因有两个:
您可以通过这种方式轻松调用它:
new $className($_POST);
$_POST
是一个超全球版(我确定你知道这一点)并不需要作为参数传递才能被访问。