Да, методы доступа являются непроизводительными затратами, хотя синтаксис для использования сеттеров / получателей такой же чистый, как прямой доступ к публичным свойствам ... немного более многословный, но такой же чистый.
Самым большим преимуществом методов доступа является то, что вы можете использовать свой метод set для проверки значений и отклонения неуместных значений (например, пытаясь установить свойство, которое всегда должно быть целым числом в строке или массиве) ... но только эта проверка работает, если внешний код не может получить доступ к свойству напрямую.
Второе преимущество, если ваш код имеет связанные свойства, когда изменение свойства A также требует изменения свойства B ... если свойства общедоступны, вы не можете контролировать (или применять) это.
Использование методов set позволяет реализовать свободный интерфейс или более чистый код для таких примеров, как:
echo $obj->setFoo('a');
вместо
$obj->setFoo('a'); echo $obj->getFoo();
если вы включаете возврат в свой метод set