Как красиво решить это с помощью ООП?
наверно в вашем случае нужен паттерн проектирования Фабричный метод.class MaterialFactory 
{
    public static function build($type)
    {
        // тут генерим путь до класса на основе его типа
        return new $className();
    }
}

class Material
{
    public function save()
    {
        // тут свои действия
    }
}

class SuperMaterial
{
    public function save()
    {
        // тут другие действия
    }
}
потом в вашем методеpublic function save($one,$type){
     $obj = MaterialFactory::build($type);
     $obj->save();
}
но схему можно ещё улучшить, всё зависит от текущего вашего кода
interface StorableMaterial
{
    public function save();
}

class Material implements StorableMaterial
{
    public function save()
    {
        // ...
    }
}

class SuperMaterial implements StorableMaterial
{
    public function save()
    {
        // ...
    }
}
А затем в нужно смотреть тот класс, откуда дергается метод save() и работать там с абстракцией в виде интерфейса SavableMaterial, а не конкретным классом