Visibilidad predeterminada de los métodos de clase en PHP

3 minutos de lectura

avatar de usuario
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


avatar de usuario
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.

http://www.php.net/manual/en/language.oop5.visibility.php

  • Lo mismo ocurre con las propiedades

    – Marc.2377

    11 de enero de 2017 a las 19:52

  • Lo mismo ocurre con las constantes.

    – Kolyunya

    31 de enero de 2018 a las 14:46


  • 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


avatar de usuario
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).

  • Felicitaciones por el razonamiento.

    – Guney Ozsan

    1 oct 2018 a las 13:42

avatar de usuario
Sasa

La visibilidad predeterminada es PÚBLICA

Fuente

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
    }
}

avatar de usuario
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?

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
Privacidad