Php 向对象动态添加方法

Php 向对象动态添加方法,php,Php,为了好玩,我尝试让它能够为数组提供一些选项,然后将数组内爆为一个字符串,该字符串可以与WideImage类一起使用。但是我有麻烦了。好像这实际上是不可能的 我的代码如下: $options = array('resize'=>'50,50'); $actions = implode('->', $options); $img = WideImage::load($image) . $actions . ';'; 这将使字符串类似于: WideImage::load('../ima

为了好玩,我尝试让它能够为数组提供一些选项,然后将数组内爆为一个字符串,该字符串可以与WideImage类一起使用。但是我有麻烦了。好像这实际上是不可能的

我的代码如下:

$options = array('resize'=>'50,50');

$actions = implode('->', $options);
$img = WideImage::load($image) . $actions . ';';
这将使字符串类似于:

WideImage::load('../images/photo.jpg')->resize(50,50);
我想从你们这里得到的是,告诉我这是否可行

更新

当我使用eval()时,我得到一个错误,即给定给wideimage类的方法是undefined属性

这是我的密码:

$actions = 'resize(50,50)';
return eval('WideImage::load($image)->$actions->saveToFile('path/to/file')');

这给了我一个未定义属性的错误,并说明saveToFile()是非对象的成员。但是如果我硬编码resize,并且不使用$actions,那么它实际上可以工作。我做错了什么?

调用用户函数数组非常适合这样做,但您需要重构一些东西

$options = array('method' => 'resize', 'parameters' => array(50, 50));
$obj = WideImage::load($image);
call_user_func_array(array($obj, $options['method']), $options['parameters']);

你是关于方法链接的。是的,这是可能的。首先必须通过创建新对象来更改静态调用,然后每个方法都必须返回该对象。以你为例:

<?php
class WideImage
{
    public function load($filepath){
        // your code
        return $this;
    }
    public function resize($width, $height){
        // your code
        return $this;
    }
}
$objWide = new WideImage();
$objWide -> load('../images/photo.jpg') -> resize(50,50);

您可以将该字符串传递给。