abstract uzywasz wtedy gdy chcesz "zamarkowac", ze dana klasa ma miec jakas konkretna metode, ale nie mozesz jeszcze napisac jej kodu
np.
abstract class AbstractClass
{
abstract protected function costam();
}
kazda klasa ktora ma chociaz jedna metode abstrakcyjna, musi byc abstrakcyjna - wynika tez z tego ze jesli dziedziczysz po klasie abstrakcyjnej i nie pokryjesz jej abstrakcynych metod, to wlasnie tworzysz nastepna klase abstrakcyjna

oczywiscie nie mozesz tworzyc obiektow klasy abstrakcyjnej

poniewaz maja one metody ktore nie maja implementacji wiec nie moga sie wykonac

klasy abstrakcyjne maja sens wtedy gdy tworzysz klasy dziedziczace po nich, wtedy:
1. narzucasz ze pewne metody musza miec implementacje, jesli ktos chce tworzyc normalne obiekty
2. dzieki temu ze interpreter wie, ze AbstractClass ma jakas metode, mozesz uzywajac polimorfozmu traktowac klasy dziedziczace po AbstractClass, jak instancja obiektu AbstractClass i wtedy odwolywac sie normalnie do jej metod abstrakcyjnych
http://php.net/manual/en/language.oop5.abstract.php