Asegurar que puedas actualizar tus aplicaciones fácilmente es importante para
nosotros. Por ello sólo rompemos la compatibilidad en las liberaciones de
versiones major
. Puedes familiarizarte con el versionado semántico, el cual utilizamos en todos los proyectos
de CakePHP. Pero resumiendo, el versionado semántico significa que sólo las
liberaciones de versiones major
(tales como 2.0, 3.0, 4.0) pueden romper la
compatibilidad hacia atrás. Las liberaciones minor
(tales como 2.1, 3.1, 3.2)
pueden introducir nuevas funcionalidades, pero no pueden romper la compatibilidad.
Los lanzamientos de correcciones de errores (tales como 3.0.1) no añaden nuevas
funcionaliades, sólo correcciones de errores o mejoras de rendimiento.
Nota
CakePHP empezó a seguir el versionado semántico a partir de la 2.0.0. Estas reglas no se aplican en las versiones 1.x.
Para aclarar que cambios puedes esperar de cada nivel de lanzamiento tenemos
más información detallada para desarrolladores que utilizan CakePHP y que
trabajan en él que ayudan a aclarar que puede hacerse en liberaciones minor
.
Las liberaciones major
pueden tener tantas rupturas de compatibilidad como
sean necesarias.
Para cada liberación major
y minor
el equipo de CakePHP facilitará una
guía de migración. Estas guías explican las nuevas funcionaliades y cualquier
ruptura de compatibilidad que haya en cada lanzamiento. Pueden encontrarse en
la sección Apéndices del cookbook
.
Si estás desarrollando tu aplicación con CakePHP las siguientes pautas explican la estabilidad que puedes esperar.
Con excepción de las liberaciones major
, las interfaces que provee CakePHP
no tendrán ningún cambio en los métodos existentes. Podrán añadirse nuevos
métodos, pero no habrá cambios en los ya existentes.
Las clases que proporciona CakePHP pueden estar construidas y tener sus métodos y
propiedades públicos usados por el código de la aplicación y, a excepción
de las liberaciones major
, la compatibilidad hacia atrás está garantizada.
Nota
Algunas clases en CakePHP están marcadas con la etiqueta API doc @internal
.
Estas clases no son estables y no garantizan la compatibilidad hacia atrás.
En liberaciones minor
pueden añadirse nuevos métodos a las clases y a los ya
existentes nuevos argumentos. Cualquier argumento nuevo tendrá un valor por
defecto, pero si sobreescribes métodos con una firma diferente puedes encontrar
fatal errors
. Los métodos con nuevos argumentos estarán documentados en las
guías de migración..
La siguiente tabla esboza varios casos de uso y qué compatibilidad puedes esperar de CakePHP:
Si tu… |
¿Compatible hacia atrás? |
---|---|
Tipificas contra la clase |
Si |
Creas una nueva instancia |
Si |
Extiendes la clase |
Si |
Accedes a una propiedad pública |
Si |
Llamas un método público |
Si |
Extiendes una clase y… |
|
Sobrescribes una propiedad pública |
Si |
Accedes a una propiedad protegida |
No [1] |
Sobreescribes una propiedad protegida |
No [1] |
Sobreescribes un método protegido |
No [1] |
Llamas a un método protegido |
No [1] |
Añades una propiedad pública |
No |
Añades un método público |
No |
Añades un argumento a un método sobreescrito |
No [1] |
Añades un valor por defecto a un argumento de método existente |
Si |
Si estás ayudando a que CakePHP sea aún mejor, por favor, ten en mente las siguientes pautas cuando añadas/cambies funcionalidades:
En una liberación minor
puedes:
En una liberación |
|
---|---|
Clases |
|
Eliminar una clase |
No |
Eliminar una interfaz |
No |
Eliminar un |
No |
Hacer final |
No |
Hacer abstract |
No |
Cambiar el nombre |
Si [2] |
Propiedades |
|
Añadir una propiedad pública |
Si |
Eliminar una propiedad pública |
No |
Añadir una propiedad protegida |
Si |
Eliminar una propiedad protegida |
Si [3] |
Métodos |
|
Añadir un método público |
Si |
Eliminar un método público |
No |
Añadir un método protegido |
Si |
Mover a la clase padre |
Si |
Eliminar un método protegido |
Si [3] |
Reducir visibilidad |
No |
Cambiar nombre del método |
Si [2] |
Añadir un argumento nuevo con valor por defecto |
Si |
Añadir un nuevo argumento obligatorio a un método existente |
No |
Eliminar un valor por defecto de un argumento existente |
No |