una tipos otro objetos metodos llamar example ejemplos desde clases clase archivo php coding-style

tipos - php class example



¿Cuál es el problema con un guion bajo en los métodos de clase PHP? (13)

Mientras reviso varias bibliotecas de PHP, he notado que mucha gente elige prefijar algunos métodos de clase con un solo guión bajo, como

public function _foo()

...en lugar de...

public function foo()

Me doy cuenta de que, en última instancia, todo se reduce a preferencias personales, pero me preguntaba si alguien tenía alguna idea de dónde proviene este hábito.

Mi idea es que probablemente se esté transfiriendo desde PHP 4, antes de que los métodos de clase se puedan marcar como protegidos o privados, como una forma de implicar "no llamar a este método desde fuera de la clase". Sin embargo, también se me ocurrió que tal vez se origina en algún lugar (un idioma) con el que no estoy familiarizado o que puede haber un buen razonamiento detrás del cual me beneficiaría saber.

Cualquier pensamiento, idea y / u opinión sería apreciada.



Creo que la fuente más autorizada para este tipo de convenciones para PHP en este momento sería la PSR-2: Coding Style Guide porque Zend Framework es parte de PSR :

Los nombres de propiedad NO DEBEN tener el prefijo único para indicar la visibilidad protegida o privada.


Creo que su suposición original era correcta, he encontrado que es una práctica común para algunos idiomas el prefijo un guión bajo a los métodos / miembros, etc., que deben mantenerse privados para el "objeto". Solo una forma visual de decir, aunque puedas, ¡no deberías llamar esto!


Drupal, y usando subrayado:

De manera general, el guión bajo es para marcar simplemente el hecho de que una función probablemente solo sea llamada por una función parental relacionada ...

function mymodule_tool($sting="page title"){ $out =''''; //do stuff $out .= _mymodule_tool_decor($sting); return $out; } function _mymodule_tool_decor($sting){ return ''<h1>''.$string.''</h1>''; }

Por supuesto, solo un simple ejemplo ...


En Drupal (un php CMS), los guiones bajos se pueden usar para evitar que se llamen los https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 ( https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 ).

Si tengo un módulo llamado "my_module" y quiero nombrar una función, my_module_insert "colgará" la función hook_insert. Para evitar eso, puedo cambiar el nombre de mi función a _my_module_insert.

ps La forma en que los ganchos funcionan en Drupal es posible implementar un gancho por error, lo cual es muy malo.


Es de los viejos tiempos malos de PHP orientado a objetos (PHP 4). Esa implementación de OO fue bastante mala, y no incluyó cosas como métodos privados. Para compensar, los desarrolladores de PHP introdujeron métodos prefabricados que estaban destinados a ser privados con un guión bajo. En algunas clases más antiguas, verá /**private*/ __foo() { para darle un poco más de peso.

Nunca había escuchado que los desarrolladores introdujeran todos sus métodos con guiones bajos, por lo que no puedo comenzar a explicar las causas.


Estaba buscando la misma respuesta, investigué un poco y descubrí que los marcos de PHP sugieren diferentes estilos:

Código Igniter

El manual oficial tiene una sección de estilo de codificación que fomenta esta práctica :

Métodos privados y variables

Los métodos y variables a los que solo se accede internamente, como las funciones de utilidad y auxiliar que utilizan sus métodos públicos para la abstracción de código, deben ir precedidos de un guión bajo.

public function convert_text() private function _convert_text()

Otros marcos hacen lo mismo, como

Cakephp:

hace lo mismo :

Visibilidad del miembro

Use las palabras clave privadas y protegidas de PHP5 para métodos y variables. Además, el método no público o los nombres de variables comienzan con un único guión bajo (_). Ejemplo:

class A { protected $_iAmAProtectedVariable; protected function _iAmAProtectedMethod() { /* ... */ } private $_iAmAPrivateVariable; private function _iAmAPrivateMethod() { /* ... */ } }

Y también

PERA

hace lo mismo :

Los miembros privados de la clase van precedidos de un solo guion bajo. Por ejemplo:

$_status _sort() _initTree()

Mientras

Drupal

el estilo de código específicamente advierte contra esto :

  1. Las propiedades y métodos protegidos o privados no deben usar un prefijo de subrayado.

Sinfonía

por otro lado, declares :

Symfony sigue los estándares definidos en los documentos PSR-0, PSR-1, PSR-2 y PSR-4.


Estaba totalmente en contra del prefijo de métodos privados / protegidos con guiones bajos, ya que puede usar palabras clave privadas / protegidas para eso e IDE lo marcará por usted.

Y todavía lo soy, pero encontré una razón por la cual puede ser una buena práctica. Imagine que tiene el método público addFoo() y dentro de ese método tiene una parte de la tarea que es común con otros métodos addFooWhenBar() , addFooWhenBaz() ... Ahora, el mejor nombre para ese método común sería addFoo() , pero ya está tomada, por lo que debes encontrar un nombre feo como addFooInternal() o addFooCommon() o ... pero el método privado _addFoo() se ve como el mejor.


Lo sé de Python, donde el prefijo de tus variables con un guión bajo hace que el compilador traduzca una secuencia aleatoria de letras y números frente al nombre de la variable real. Esto significa que cualquier intento de acceder a la variable desde fuera de la clase daría como resultado un error de "variable indefinida".

No sé si esta sigue siendo la convención para usar en Python, aunque


Los guiones bajos principales generalmente se usan para propiedades y métodos privados . No es una técnica que suelo emplear, pero sigue siendo popular entre algunos programadores.



Usando el guión bajo solo para recordar el propósito de que no ''modificaremos la variable'' / ''llamaremos a la función'' fuera de la clase.

Como declaramos las variables const en mayúsculas para que al ver el nombre de la variable podamos adivinar que se trata de una variable const. Similar a la variable que no queremos modificar fuera de la clase, la declaramos con guión bajo para nuestra propia convención.


Uso un guion bajo en la clase de PHP 5 que escribo para métodos privados. Es una pequeña señal visual para el desarrollador de que un miembro de la clase en particular es privado. Este tipo de alusión no es tan útil cuando se usa un IDE que distingue a los miembros públicos y privados por usted. Lo recogí de mis días C #. Viejos hábitos ...