I was looking for when and how scope resolution :: is used. So I found out that it can be used for calling static variable/function and also for. But there seems to be more to it considering this answer in Stack Overflow.
My confusion is about the last two lines of code from this answer:
/* This is more tricky
* in the first case, a static call is made because $this is an
* instance of A, so B::dyn() is a method of an incompatible class
*/
echo '$a->dyn():', "\n", $a->callDynamic(), "\n";
/* in this case, an instance call is made because $this is an
* instance of B (despite the fact we are in a method of A), so
* B::dyn() is a method of a compatible class (namely, it's the
* same class as the object's)
*/
echo '$b->dyn():', "\n", $b->callDynamic(), "\n";