Товарищи, если вы не вчитываетесь в вопрос и смотрите по ключевым словам — не отвечайте, пожалуйста!
согласитесь, что запись {a:{a:'a', b:'b', c:'c'}, b:[1, 2, 3, 4]} намного проще и быстрее, чем все варианты, которые вы предлагали выше.
Все просто, для работы __call на существующих функциях их достаточно сделать private или protected, и они будут доступны для вызова, но! Тогда появляется дырка в безопасности — вы можете вызывать любые методы. Как решить проблему?