Sobes.tech
Junior

¿Qué son los modificadores de visibilidad en PHP?

sobes.tech AI

Respuesta de la IA

Los modificadores de visibilidad (public, protected, private) determinan el nivel de acceso a las propiedades y métodos de una clase.

  • public - accesible desde cualquier lugar (dentro de la clase, en clases heredadas, desde fuera).
  • protected - accesible dentro de la clase y en las clases que heredan de ella.
  • private - accesible solo dentro de la clase en la que se declara.

Ejemplo:

<?php

class MyClass {
    public $publicProperty = 'public';
    protected $protectedProperty = 'protected';
    private $privateProperty = 'private';

    public function publicMethod() {
        echo "Acceso a método público: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Acceso a método protegido: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Acceso a método privado: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Acceso en clase hija: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Acceso a public y protected
        // echo $this->privateProperty; // Error, private no accesible
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Error, private no accesible
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Disponible
// echo $obj->protectedProperty; // Error, protected no accesible desde fuera
// echo $obj->privateProperty; // Error, private no accesible desde fuera
$obj->publicMethod();
// $obj->protectedMethod(); // Error, protected no accesible desde fuera
// $obj->privateMethod(); // Error, private no accesible desde fuera

$childObj = new MyChildClass();
$childObj->testAccess();