PHP | Especificadores de acceso

En PHP , todas y cada una de las propiedades de una clase deben tener uno de los tres niveles de visibilidad, conocidos como public , private y protected .
 

  • Público: Cualquier código puede acceder a las propiedades públicas, ya sea que ese código esté dentro o fuera de la clase. Si una propiedad se declara pública, su valor se puede leer o cambiar desde cualquier parte de su secuencia de comandos.
  • Privado: solo se puede acceder a las propiedades privadas de una clase mediante el código dentro de la clase. Entonces, si creamos una propiedad que se declara privada, solo los métodos y objetos dentro de la misma clase pueden acceder a su contenido.
  • Protegido: las propiedades de la clase protegida son un poco como las propiedades privadas en el sentido de que no se puede acceder a ellas mediante un código fuera de la clase, pero hay una pequeña diferencia en cualquier clase que herede de la clase, es decir, la clase base también puede acceder a las propiedades.

En términos generales, es una buena idea evitar crear propiedades públicas siempre que sea posible. En cambio, es más seguro crear propiedades privadas y luego crear métodos que permitan que el código fuera de la clase acceda a esas propiedades. Esto significa que podemos controlar exactamente cómo se accede a las propiedades de nuestra clase. 
Nota: si intentamos acceder a la propiedad fuera de la clase, PHP genera un error fatal.
Viabilidad de PHP Access Specifier con Class, Sub Class y Outside World:
 

Especificador de acceso de miembro de clase Acceso desde clase propia Accesible desde la clase derivada Accesible por Objeto
Privado No No
Protegido No
Público

Los siguientes ejemplos ilustran el Especificador de acceso de PHP: 
 

  • Ejemplo 1: En este ejemplo, veremos el Especificador de acceso público. 
     

php

<?php 
class GeeksForGeeks
{ 
public $x = 100 ;  # public attributes
public $y = 50 ; 
    function add() 
{ 
echo $a = $this->x + $this->y ;
echo " ";
} 
    }    
class child extends GeeksForGeeks
{ 
function sub() 
{ 
echo $s = $this->x - $this->y ; 
} 
   
}   
 
$obj = new child; 
 
// It will return the addition result
$obj->add() ; 
 
// It's a derived class of the main class,
// which has a public object and therefore can be
// accessed, returning the subtracted result.
$obj->sub() ;
              
?> 
  • Producción: 
     
150 50
  • Ejemplo 2: En este ejemplo, veremos el Especificador de acceso privado 
     

php

<?php 
class GeeksForGeeks
{ 
private $a = 75 ;  # private attributes
private $b = 5 ; 
    private function div()  # private member function
{ 
echo $d = $this->a / $this->b ;
echo " ";
} 
    }    
class child extends GeeksForGeeks
{ 
function mul() 
{ 
echo $m = $this->a * $this->b ; 
} 
   
}   
 
$obj= new child; 
 
// It's supposed to return the division result
// but since the data and function are private
// they can't be accessed by a derived class
// which will lead to fatal error .
$obj->div();
 
// It's a derived class of the main class,
// which's accessing the private data
// which again will lead to fatal error .
$obj->mul();
?> 
  • Producción: 
     
PHP Fatal error:  Uncaught Error: Call to private method 
GeeksForGeeks::div() from context '' in /home/cg/root/8030907/
main.php:22 Stack trace:#0 {main} thrown in /home/cg/root/8030907/
main.php on line 22
  • Ejemplo 3: En este ejemplo, veremos el Especificador de acceso protegido. 
     

php

<?php
class GeeksForGeeks
{
protected $x = 1000 ; # protected attributes
protected $y = 100 ;
    function div()
{
echo $d = $this->x / $this->y ;
echo " ";
}
    }    
class child extends GeeksForGeeks
{
function sub()
{
echo $s = $this->x - $this->y ;
}
 
}
class derived # Outside Class
{
function mul()
{
echo $m = $this->x * $this->y ;
}
     
}
$obj= new child;
 
// It will return the division result
$obj->div();
 
// Since it's a derived class of the main class,
$obj->sub();
 
// Since it's an outside class, therefore it
// will produce a fatal error .
$obj->mul();
 
?>
  • Producción : 
     
10
900
Fatal error:  Uncaught Error: Call to undefined method 
child::mul() in /home/cg/root/8030907/main.php:32

Publicación traducida automáticamente

Artículo escrito por parna_28 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *