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