如何使用动态创建的参数调用静态类方法?

时间:2016-07-20 09:42:07

标签: php class methods static datatables

我正在使用jQuery插件dataTables在网站上创建一个可编辑的表格,我正在尝试动态调用fields方法接受参数:

Editor::inst( $db, $table, $primary_key )
    ->fields(
        // this part needs to be dynamic
        Field::inst( 'value1' )
            ->validator( 'Validate::numeric' ),
        Field::inst( 'value2' )
            ->validator( 'Validate::numeric' )
    )
    ->process( $_POST )
    ->json();

我在数组中有value1和value2,但可以有两个以上。数量取决于我想要创建的表格:

$columns = array("value1", "value2");

如何在方法调用中获取它们以便正确评估所有内容?

我真的不想使用 case 。必须有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:0)

您可以使用func_get_args()func_num_args()函数来处理动态参数。

您可以像这样使用它们,

function yourFunction() {
    $totalParams=func_num_args();    
    echo "Total parameters: ".$totalParams;
    $params = func_get_args();
    foreach($params as $i=>$param) {
         // $param is passed value.
         // $i is the index.
    }
}

请像这样打电话,

yourFunction('param1value','param2value','param3value');
  

func_num_args()返回传递给函数的参数数量。

   func_get_args()返回一个包含函数参数列表的数组。

答案 1 :(得分:0)

来自datatables文档。

  

fields()方法可以使用您想要定义的任意数量的字段实例,也可以多次调用以添加其他字段。

$columns = array('value1', 'value2');
$editor = Editor::inst($db, $table, $primary_key);
foreach ($columns as $field) {
    $editor->fields(Field::inst($field)->validator('Validate::numeric'));
}
$editor->process($_POST)
    ->json();

您还可以使用以下内容使验证器动态化:

$columns = array('value1' => 'Validate::numeric', 'value2' => 'Validate::notEmpty');
$editor = Editor::inst($db, $table, $primary_key);
foreach ($columns as $field => $validator) {
    $editor->fields(Field::inst($field)->validator($validator));
}
$editor->process($_POST)
    ->json();