¿Por qué WordPress tiene funciones privadas?

8

Nota: estoy hablando de _wp_get_current_user(); no wp_get_current_user() .

Si marca la función _wp_get_current_user(); , puede ver la siguiente declaración:

  

El acceso a esta función está marcado como privado. Esto significa que no es   diseñado para ser usado por desarrolladores de plugins o temas, solo en otros   funciones Se enumera aquí para la integridad. Utilizar   wp_get_current_user () en su lugar.

¿Por qué WordPress tiene este tipo de funciones privadas? ¿Por qué WordPress no permite utilizar este tipo de funciones para los desarrolladores de temas o de complementos de WordPress?

    
pregunta Ranuka 17.11.2016 - 17:19

3 respuestas

19

Es una práctica bastante normal que el código no sea parte de la API pública.

Pero gran parte del código WP es antiguo y de procedimiento. No hay técnicas formas de hacer una función privada.

Estos son semánticamente privados, es decir, WP no quiere que los uses, pero en realidad no te lo pueden prohibir. Hay una larga historia de API WP "privadas" que se usan activamente en la práctica por extensiones.

Las razones para declarar algo privado varían de un caso a otro. En este caso específico, el motivo parece ser que la versión "pública" es conectable, por lo que mover la implementación a una versión "privada" permite que el original sea reemplazado más fácilmente / con menos problemas.

    
respondido por el Rarst 17.11.2016 - 17:31
7

En pocas palabras, los desarrolladores elegirán hacer que esas funciones internas sean "privadas" porque no quieren tener que proporcionar soporte público para ellas. Por ejemplo, no garantizan que los argumentos de la función se mantendrán consistentes en la ubicación o incluso la existencia de una actualización a otra.

De todos modos, esto no impide que muchos desarrolladores utilicen funciones 'privadas' ...

    
respondido por el Roy 17.11.2016 - 18:20
3

Al principio no estaba del todo claro para mí, así que tuve que revisar más profundamente. Si toma, por ejemplo, el gran archivo wp-includes/user.php , no encontrará una sola definición de clase de PHP allí.

File: /wp-includes/user.php
2452:  * @since 4.5.0
2453:  * @access private
2454:  *
2455:  * @see wp_get_current_user()
2456:  * @global WP_User $current_user Checks if the current user is set.
2457:  *
2458:  * @return WP_User Current WP_User instance.
2459:  */
2460: function _wp_get_current_user() {

Sin embargo, encontrará la función _wp_get_current_user() en la que estamos interesados. Lo que ve @access private es solo una sugerencia para el generador de documentos PHP.

Esto también indica que esta función en el futuro puede convertirse en función privada dentro de una clase.

El concepto de una función privada existe solo cuando tienes clases de PHP y esto es con PHP 5 o posterior (desde entonces PHP está orientado a objetos). El concepto se llama encapsulación.

WordPress mejora gradualmente el código PHP al introducir clases, pero el proceso no ocurrirá durante la noche.

    
respondido por el prosti 29.11.2016 - 15:17

Lea otras preguntas en las etiquetas