Visibilidad predeterminada de los métodos de clase en PHP
⏰ 3 minutos de lectura
Yada
Miré a la manualpero parece que no puedo encontrar la respuesta.
¿Cuál es la visibilidad predeterminada en PHP para métodos sin declaración de visibilidad? ¿PHP tiene una visibilidad de paquete como en Java?
Por ejemplo, en el siguiente código, es go() público o privado?
class test {
function go() {
}
}
La razón por la que pregunté es que he visto muchos códigos de constructores escritos como function __construct() y algunos como public function __construct(). ¿Son equivalentes?
DOC en 2021: Class properties must be defined as public, private, or protected. If declared using var, the property will be defined as public.
– jave.web
21 de junio de 2021 a las 14:04
Precio Jansen
El valor predeterminado es público.
Los métodos de clase se pueden definir como públicos, privados o protegidos. Los métodos declarados sin ninguna palabra clave de visibilidad explícita se definen como públicos.
Esto cambió con el tiempo, ahora es “debe” y no “puede”. También normalmente no necesita propiedades públicas y muchas veces es un olor a código.
– jave.web
21 de junio de 2021 a las 14:05
Juanco
El valor predeterminado es público. Es una buena práctica incluirlo siempre, sin embargo, PHP4 admitió clases sin modificadores de acceso, por lo que es común que no se usen en el código heredado.
Y no, PHP no tiene visibilidad de paquetes, principalmente porque hasta hace poco PHP no tenía paquetes.
@Ian: Yo diría porque “explícito es mejor que implícito” (como dice el Zen de python). Hace que otros programadores desperdicien ciclos cerebrales preguntándose si el constructor es privado o público o qué. Si la gente siempre usara modificadores de acceso, es posible que el cartel original ni siquiera hubiera hecho esta pregunta.
– Usuario
15/10/2012 a las 21:27
También cabe destacar que en lenguajes como Java, donde el valor predeterminado es paquete privado, uno siempre se pregunta si es paquete privado por diseño o si el desarrollador simplemente se olvidó de especificarlo (especialmente cuando se trata de desarrolladores no tan experimentados). Es por eso que PMD incluye reglas como esta: pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
– Juanco
24 de enero de 2017 a las 17:22
@User, por lo tanto, Python hizo que todo fuera público y haga el truco que quiera con él x)
– jave.web
21 de junio de 2021 a las 14:07
El valor predeterminado es público. La razón probablemente sea la compatibilidad con versiones anteriores, ya que el código antiguo espera que sea público (dejaría de funcionar si no fuera público).
Cuando no visibilidad palabra clave (public,private o protected) utilizados, los métodos serán público. Pero, no puede definir propiedades de esta manera. Para propiedadesdeberá agregar una palabra clave de visibilidad en la declaración.
Para las propiedades que no están declaradas en la clase y le asignas un valor dentro de un método, tendrán visibilidad pública.
<?php
class Example {
public $name;
public function __construct() {
$this -> age = 9; // age is now public
$this -> privateFunction();
}
private function privateFunction() {
$this -> country = "USA"; // this is also public
}
}
empollón
function __construct() y public function __construct() funciona como el mismo nombre de método.
Si no pudo definir el prefijo para un nombre de método, debería ser público de forma predeterminada.
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
DOC en 2021:
Class properties must be defined as public, private, or protected. If declared using var, the property will be defined as public.
– jave.web
21 de junio de 2021 a las 14:04