"self" (and "parent") essentially refer to a class in general, while "$this" refers to the specific instance of the class, i.e. "this object". The "->" operator is used with objects, so will be what follows "$this", while the "::" operator is used with the more general class reference, so will be used with "self" (or "parent").
"self" is used in a static context, either within a static method, or to reference a static class variable anywhere within a class, while "$this" refers only to the current instance (object), so would be used in any non-static method (which generally is the more common case).
The "::" operator is similarly used to call a static method or parameter from outside of the class, e.g. "ClassName::methodName()".