hello, here's the explanation as far as I understood it.
these methods (set, get, _call) are php5 features. they provide a kind of fallback mechanisms that are active when you try to access an object's property which is not defined.
normally you don't call them explicitly.
if you - as in the poorly explained manual example - try to access an object variable "a", and it is not there so far (no var/public/private etc. declaration in the class), PHP tries to invoke a standard getter or setter (get, set). if you have programmed one - as in the example - you can handle these cases regularly.
that's why in the example you can set "n" silently (because it is directly accessible due to it having been declared "private $n;") but when trying to set the inexistent "a" variable, the fallback setter is triggered (which says "Setting [a] to 100").
this works alike with get, and it works with method calls, too (call).
I hope (a) I am correct and (b) I could help you.
PS: regarding your question who is the caller of these methods ... it's the php runtime itself. if someone tries to access a non-existing object property, php converts it into a function call such as:
echo $object->notexisting;
-> PHP: what the ...??? ->
echo $object->__get("notexisting");
or:
$object->unknown = "huh";
-> PHP: ha? ->
$object->__set('unknown', 'huh');
and:
$object->doSomethingNew("bli", "bla", "blo");
-> PHP: don't know such a method ... ->
$object->__call("doSomethingNew", array("bli", "bla", "blo"));