> $instance::staticMethod() call is not correct call in other languages. In PHP is correct.

This may come confusing when $instance is an object it will call the method on that object. If $instance is a string it will call the static method on that class. So `$instance->staticMethod()` is what I'd prefer in this case.

> Also notice that static:: is not limited to static methods (which I think is really weird and counter intuitive). So the presence of static::foo() doesn't actually tell you if foo is static or not.

You mean `static::method()` is equivalent to `$this->method()`?

If all these ugly things are really possible the best way to go might really be calling $this-> when we have an object and static:: when not...