Por que o WordPress tem funções privadas?

8

Observação: estou falando de _wp_get_current_user(); não wp_get_current_user() .

Se você verificar a função _wp_get_current_user(); , poderá ver a seguinte declaração:

  

O acesso desta função está marcado como privado. Isso significa que não é   destinado ao uso por desenvolvedores de plug-ins ou de temas, somente em outros   funções. Está listado aqui por completo. Usar   wp_get_current_user () em vez disso.

Por que o WordPress possui esses tipos de funções privadas? Por que o WordPress não permite usar esses tipos de funções para desenvolvedores de plugins ou temas do WordPress?

    
por Ranuka 17.11.2016 / 17:19

3 respostas

19

É uma prática bastante normal que o código não faça parte da API pública.

Mas muito do código WP é antigo e processual. Não há maneiras técnicas de fazer uma função privada.

Estes são semanticamente privados, ou seja, o WP não quer você usá-los, mas não pode proibi-lo. Há um longo histórico de APIs WP "privadas" sendo ativamente usadas na prática por extensões.

As razões para declarar algo particular variam de caso para caso. Neste caso específico, você levantou a razão de que a versão "pública" é plugável, portanto, mover a implementação para uma versão "privada" permite que o original seja substituído com mais facilidade / com menos problemas.

    
por Rarst 17.11.2016 / 17:31
7

Simplificando, os desenvolvedores escolherão tornar essas funções internas 'privadas' porque não precisam fornecer suporte público para elas. Por exemplo, eles não garantem que qualquer argumento de função seja mantido consistente no posicionamento ou mesmo na existência da atualização para atualização.

Não que isso realmente impeça muitos desenvolvedores de usar funções 'privadas' de qualquer maneira ...

    
por Roy 17.11.2016 / 18:20
3

Não foi a princípio absolutamente claro para mim, então eu precisava dar uma olhada mais profunda. Se você pegar, por exemplo, o ótimo arquivo wp-includes/user.php , você não encontrará uma única definição de classe PHP lá.

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() {

No entanto, você encontrará a função _wp_get_current_user() em que estamos interessados. O que você vê @access private é apenas uma dica para o gerador de doc do PHP.

Isso também indica que essa função no futuro pode se tornar uma função privada dentro de uma classe.

O conceito de uma função privada existe somente quando você tem classes PHP e isso é com PHP 5 ou posterior (desde então o PHP é Orientado a Objetos). O conceito é chamado de encapsulamento.

O WordPress melhora gradualmente o código PHP introduzindo classes, mas o processo não acontece durante a noite.

    
por prosti 29.11.2016 / 15:17

Tags