Re your question: no.
An interface is supposed to provide a "contract" that all children must adhere to. As such, it might not be a good idea to break that contract by doing extra things anyway.
An alternative option is to provide a public setter for the additional parameters, then access them by properties within setColor():
interface Figures {
public function setColor($color);
}
class Circle implements Figures {
protected $_additionalParameter;
public function setColor($color) {
echo $this->_additionalParameter . ' - not passed in any more';
}
public function setAdditionalParameter($blah = '')
{
$this->_additionalParameter = $blah;
return $this;
}
}
And used like so:
// you implement stuff
$circle = new Circle;
$circle->setAdditionalParameter('blah')
->setColor('color');
// blah - not passed in any more
If you have lots of additional parameters you might find it tidier to use the magic method __set() to cover all your bases instead of loading up your classes with lots of them.