Представь, ты разрабатываешь API для отправки прочты и тебе захотелось по мимо build-in реализация отправки почты (функция mail) реализовать еще несколько вариантов, например использовать сервис Mailgun. API ты конечно же разрабатываеть, чтоб им пользовались другие разработчики, и ты прекрасно понимаешь, что сторонний разработчик может захотеть отправлять и через другие сервисы, например тот же mailchimp. Твоя задача предоставить понятный "интерфейс" стороним разработчикам. Например каждый новый provider должен реализовать методы setSubject, setBody, send, к ним аргументы, а так же ты указываешь в документации, что должны возвращать эти методы. Все, ты подготовил "интерфейс". Теперь я реализую его. Какие я там буду создавать свойства - это уже не касается интерфейса. Да хоть global variable использовать, это уже не его дело. Вот и подумай, нужны ли вообще абстрактные свойства