По-моему, твое решение слишком надуманно. Переносить специфические конструкции одного языка в другой, далеко не всегда оправдано.
>занимается тем что обрабатывает __set и __get но ИМХО очень не разборчива получается
Почему не разборчиво? Потому что не так как в C#?
>Но делить это на две функции set_a() и get_a() не удобно..
Почему не удобно? Потому что не так как в C#?
Почему нельзя сделать одну функцию, которая когда принимает один параметр, используется как get, а если два парамерта, то как set? И назвать ее a(). Хотя в этом случае можно обойтись 0 или 1 параметром.