- Constructores (__construct()) y destructores (__destruct()) unificados
- PPP: Private, Protected, Public. Se puede restringir el alcance de variables y métodos
- Objetos son siempre pasados por referencia, de manera que si se necesita una copia se hace por clonamiento (__clone())
- Interceptores para el accesso a variables (__get(), __set()) y métodos (__call())
- Implementación de interfazes y de clases abstractas (similar a Java)
- Referencia indirecta. Si un metodo genera un objeto, se puede acceder a las propiedades de este directamente: $obj->crearGato()->maullar().
- Excepciones: métodos en objetos pueden generar excepciones, nuevas excepciones se pueden definir, y se usa "try ... catch ..." para poder manipularlas.
- Clases pueden implementar constantes (const)
- Métodos pueden ser marcados como estáticos (static)
- Clases y métodos pueden ser marcados como finales (final) para evitar que sean extendidos/modificados.
- En la definición de métodos se puede aludir al tipo de objeto aceptado como parámetro: function alimentar(Gato $michi).
- ... y aun hay mas