<?php

abstract class Animal
{
    abstract function talk();
}
class Cat extends Animal
{
    function talk()
    {
        return "Meow!";
    }
}
class Dog extends Animal
{
    function talk()
    {
        return "Woof!";
    }
}
class MyClass
{
    public static function write(Animal $a)
    {
        echo $a->talk();
    }
}
$myclass = new MyClass();
$myclass->write(new Cat());
// вывовдит Мяу, и в зависимости от передаваемого обьекта можно варировать функционалом