Какой стиль ООП выбрать?
пример 2 и только
Обьясню
Например, SomeClass - сервис логгирования.
Тогда сделаем ему интерфейс, создадим 2 подтипа - логер на файлах и в БД.
Итого 1 интерфейс, 2 класса реализации.
Параметры метода описаны в интерфейсе..
Вот и имеем, что метод будет вызван с конкретным аргументом...
В других случаях не понятно поведение подклассов, которые будут это реализовать.. А именно в плане того, что должен делать setItem в 1 случае, и ессно интерфейсы не могут описывать конструкторы как в примере 3...
В итое имеем, что можно легко заменить объект другим объектом ТОЛЬКО в примере 2.
Насчет геттеров - имхо, лучше создавать приватные свойства и геттер+сеттер
Т.к. на больших проектах чаще всего получается лапша, да и в плане многопоточности, и опять же-интерфейсов -просто свойства не есть хорошо...
Вообще забудьте о дополнительном слове get -- это излишество. 
1) Всё ок, метод setItem чисто теоретически может возвращать и только что добавленный айтем, тут все зависит от того, как класс используется. Я не знаю можно ли так пхп, но метод может в принципе возвращать и this или ссылку сам на себя. Что может быть использовано для реализации патерна билдер, например.
2) Плохо. Класс должен возврашать хранимый айтем, знать об его внутреннем представлении о каких-то его методах или полях ему совсем не нужно. Вернули айтем, потом у него и спрашивайте данные.
3) Третий пример я не понял. Да, в целом у класса есть какие-то данные, то да, он может их вернуть. Это не проблема.
PS То, о чём вы спрашиваете, называется OOD. К языку программирования это имеет немного отношения.
PPS В следующий раз, задавайте вопросы по какой-нибудь более конкретной модели. Пара-тройка простеньких классов, описывающих, ну там, книжную полку, напрмиер, на которую можно поставить книгу и забрать. Ваш пример слишком абстрактный.