我可以通过函数参数传递一些PHP函数来执行吗?

时间:2015-09-17 03:34:21

标签: php

新手问题......

是否可以使用函数的参数传递要在函数内执行的代码?有点像...

function myfunction($somecode)
{
    $somecode;
}

myfunction("echo 'foo'");

实际场景:我的函数使用Imagick执行一些图像处理......

function myfunction($imagePath)
{
    $image = new Imagick($imagePath);
    $image->gaussianBlurImage(0, 5);
}
myfunction("test.jpg");

我希望能够在函数参数中指定要在图像上使用的Imagick方法,所以我可以使用类似的东西......

function myfunction($imagePath, $method)
{
    $image = new Imagick($imagePath);
    $image->$method;
}
myfunction("test.jpg", "thumbnailImage(100, 100)");

这样的事情可能吗?

2 个答案:

答案 0 :(得分:1)

您也可以使用call_user_func_array

执行此操作,而不是使用匿名函数和变量变量
function myfunction($imagePath, $method, array $arguments)
{
    $image = new Imagick($imagePath);
    call_user_func_array([$image, $method], $arguments);
}
myfunction("test.jpg", "thumbnailImage", [100,100]);

为了更加安全,您可以针对Imagick对象的可用方法的白名单检查方法。

答案 1 :(得分:0)

编程PHP (Lerdorf,Tatroe,& MacIntyre),第2版。 CH。 3,p。 73

匿名函数

“您可以使用create_function()创建匿名函数。”

PHP Manual: create_function()

$lamda = create_function( '$param1,param2', 'code;' );

但是,在PHP 5.3及更高版本中还有更多要知道的内容。 来自匿名函数下的PHP手册的示例#2。

$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

PHP Manual: Anonymous Functions