<?php
interface JSONable {
    public function getAsJSON();
}

interface XMLable {
    public function getAsXML();
}

interface Arrayable {
    public function getAsArray();
}

class DataWrapper {
    protected $_data;

    public function __construct($data)
    {
        $this->_data = $data;
    }
}
class MuhArticles extends DataWrapper implements XMLable, JSONable{

    public function getAsJSON()
    {
        return json_encode($this->_data);
    }

    public function getAsXML()
    {
        return '<hui>';
    }

    /*
     * это для самого частого вывода, например в шаблонах
     */
    public function __toString()
    {
        return 'default output method';
    }

}

/**
 * Usages
 */
$articles = new MuhArticles(['hui' => 'pizda', 'dzigurda']);

echo $articles; //'default output method'

if ($articles instanceof XMLable) {
    echo $articles->getAsXML(); //'<hui>'
}

if ($articles instanceof JSONable) {
    echo $articles->getAsJSON(); //ну в json вернет кароч
}

// А теперь паси какая телега

class YOBA_Enterprise_Exchange{

    public function sendXml(XMLable $data)
    {
         $this->send($data->getAsXML());
    }
}
