如何在带参数的函数中调用带参数的函数

时间:2016-07-11 07:26:46

标签: php function class arguments

我怀疑也许有人可以在这里回答。 我的代码工作得很好,但我很安静,我做错了。 必须有一种更简单,更清洁的方法来实现它。

假设这个类:

class myClass {
    public static function myFunctionOne ($arg_one, $arg_two, $arg_tree) {
        echo $arg_one;
        myClass::$arg_two($arg_tree);
    }
    public static function myFunctionTwo ($arg_four) {
        echo $arg_four;
    }
}

然后你在某处调用Class(我的情况是一个PHP文件中构建的HTML菜单),如下所示:

myClass::myFunctionOne('echo a string', 'myFunctionTwo', 'echo forth value');

这很好用,它输出:

echo a string echo forth value

但它合法吗?

对我来说看起来很粗略。 我可以使用这样的函数,在带参数的函数中使用Argumetns调用函数吗?

1 个答案:

答案 0 :(得分:2)

你能做到吗?绝对。你应该这样做吗?也许不是。

在PHP中,这称为Variable Functions。基本上,附加(的任何变量都将用作要调用的函数或方法的名称。

如果需要传递多个参数,可以将最终函数的参数作为数组传递,然后在调用最终变量函数时解压缩数组。

但是,由于其他原因,它可能不是一个很好的设计模式,这可能会使代码难以维护。对myClass::myFunctionOne()的调用者来说,myClass的调用者可能违反Abstraction的主体,必须知道 trait Crud[M] { import slick.lifted.TableQuery def generateScript[T , F ](callback:(TableQuery[_]) => String); def create(model: M): Any; def update(model: M): Future[Int]; def findByID(id: Long): Future[Option[M]]; def read(): Future[List[M]]; def delete(model: M): Future[Int]; def createTable(): Unit; } class CrudImpl[V, M <: DefaultModel[Option[Long]], T <: AbsTable[M]](tableQuery: TableQuery[T]) extends Crud[M] { .... } val crudUser: Crud[User] = new CrudImpl[Option[Long], User, UserTable](TableQuery[UserTable]); 具有哪些方法/函数以及他们采用了什么参数。

请注意,我在这里使用术语“函数”,但如果它在一个类中,则称为“方法”。