Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Alcance o Encapsulamiento

8/19
Recursos

Aportes 20

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

En lo personal, pienso que el tema de herencia debió de haber sido el primer tema a explicar antes de meternos con el resto de temas porque muchas cosas hacen referencia de alguna manera a la herencia. Pero trataré de explicarlo de una mejor manera:

public: Es una propiedad publica, a la cual puedo acceder desde cualquier parte de mi código y puedo modificarla sin problemas:

<?php

class User {

    public $name;
    
}

$pablito = new User;
$pablito->name = "Pablito";

?>

Esto es posible porque $name es una propiedad publica, por tanto, puedo acceder desde fuera de la clase, la clase abarca desde la llave de apertura hasta la llave de cierre de la clase.

protected: Esta propiedad es exclusiva de PHP, basicamente, hace que esta propiedad NO pueda ser accedida desde fuera de mi clase, pero SI puede ser accedida desde cualquier otra clase que herede a mi clase, ¿Qué es herencia? No te preocupes, ya casi llegamos a ese tema, pero que el nombre te vaya dando una idea, por tanto, este ejemplo:

<?php

class User {

protected $name;
}

$pablito = new User;
$pablito->name = “Pablito”;

?>

Mandaría un error, pues $name es protected y no puedo llamarla desde fuera de la clase, pero este otro ejemplo:

<?php

class User {

    protected $name;
    
}

class Pablito extends User{

    public function poner_nombre($nombre){
        $this->name = $nombre;
    }

}


$pablito = new Pablito;
$pablito->poner_nombre("Pablito");

?>

Si funcionaría, pues las clases que heredan de mi clase SI pueden acceder.

private: Este nos indica que nada, absolutamente nada que NO esté dentro de mi clase va a poder acceder a esa propiedad o método, ni aunque la heredes, esa propiedad va a estar disponible única y estrictamente dentro de mi clase, por lo que el ejemplo anterior daría error (Si hubiésemos puesto private $name), pero el siguiente ejemplo funcionaría a la perfección:

<?php

class User {

    protected $name;

    public function poner_nombre($nombre) {
        $this->name = $nombre;
    }
    
}

$pablito = new User;
$pablito->poner_nombre("Pablito");

?>

De esta forma y con ejemplos creo que se entiende mejor lo que es el alcance 😄

Alcance o Encapsulamiento


El alcance hace referencia al encapsulamiento o principio de ocultación. Esto nos ayuda cuando estamos trabajando con herencia.

<?php

class User {
    // public
    // protected
    // private

    public const PAGINATE = 25;

    public $username;
    // protected $username;
    // private  $username;

    public function getUsername() {
        # code...
    }

    // Poner en mayúsculas nos ayuda crear rutas absolutas y no relativas var_dump(__DIR__);
}

Para esconder datos vamos a utilizar los modificadores de acceso:

  • Public → Puede ser accedido por todos, o seá por cualquier elemento o clase.
  • Protected → Podrá ser accedido a nivel de la clases, paquetes y Subclases (las clases hijas ← clases padres).
  • Defaulf → Este nos permite el acceso a nivel de clases y paquetes. O sea, que a nivel de herencia no puede ser accedido.
  • Private → Solo puede ser accedido a nivel de clases, esto quiere decir, que solo puedes ser modificado a nivel de la clase, o sea, por ella misma.

🤔 El alcance o encapsulamiento nos permite garantizar la integridad de los datos.

public -> Cualquiera puede acceder a estos elementos.
protected -> Solo la clase padre e hijos pueden acceder a estos elementos.
private -> Solo la clase padre puede acceder a estos elementos.

Veo que PHP maneja los mismos conceptos de Java en muchas de sus estructuras.

8. Alcance o Encapsulamiento

Si coloco una variable tipo (principio de ocultación o encapsulación):

  1. public dentro de una clase, podrá ser accedida fuera de ella y también heredada.
  2. protected dentro de una clase, no podra ser accedida fuera de ella, pero sí podrá ser heredada.
  3. private dentro de una clase, no podra ser accedida fuera de ella, ni tampoco podrá ser heredada.

Comparto el código revisado en clase:

<?php

class User
{
    //public
    //protected
    //private
    public const PAGINATE = 25;
    //var_dump(__DIR__);

    public $username;
    //protected $username;
    //private $username;

    public function getUser()
    {
        // code
    }
}

Alcance/Encapsulamiento es limitar quienes tienen permitido interactuar con el contenido(propiedades, métodos) de nuestras clases.

Al alcance o encapsulamiento también se le conoce como SCOPE y si, el scope puede definirse como un lugar desde el que puedes acceder a un espacio.

Aquí les dejo una breve explicación sobre el alcance:
El alcance o encapsulamiento es una técnica que permite
restringir el acceso a ciertos atributos y métodos.
Por ejemplo:
public: permite el acceso a todos los elementos de una clase
protected: atributos o métodos que pueden ser usados si tienen herencia padre e hijo.
private: Impide el acceso a los métodos o atributos a otras clases.

Alcance o Encapsulamiento

Hace referencia al encapsulamiento o principio de oculatación.
Nos ayuda cuando trabajamos con la herencia, para esto tenemos:

  • Public: Los elementos públicos son aquellos que se pueden acceder a lo largo de todo el sistema

  • Protected: Solo pueden acceder los elementos de las clases que se heredan

  • Private: Solo puede ser accedido a través de la misma clase.

Con lo anterior se garantiza la integridad de los datos.

<?php
    class User
    {
        // public
        // protected
        // private

        public const PAGINATE = 25;

        // public $username;
        // protected $username;
        // private $username;

        public function getUsername(){
            // ...
        }
    }
?>

Cuando escribimos el encapsulamiento garantizamos la integridad de los datos.

Quieres recordar fácilmente los términos public, private o protected…

El public—Es aquella persona(variable) que es muy accesible con todo mundo(todo el sistema).

Protected es aquella persona que no es accesible más que solo con sus hijos, les da acceso.

Prívate, podríamos decir que es aquella persona que no da acceso, podríamos llamarla egoísta.

¿Te sirvió?

<?php
class Student
{
protected $course = “access”;
}

class Master extends Student
{
public function accesStudent($student){
$this->name = $student;

}

}
$master = new Master;
$master->accesStudent(‘hello entiendo ya’);
echo “<pre>”;
var_dump($master);

Creo que el profe Ítalo se contradijo en esta clase ya que dijo al inicio que las propiedades o métodos de alcance protegido son a las que se puede acceder desde una clase que las herede y las privadas son las que NO tienen acceso desde fuera de sí; Al final las tergiversó… Excelente profe Igual

<?php

// public -> Pueden ser accedidos a lo largo de todo el sistema
// protected -> Solo pueden acceder aquellas clases que hereden de mi
// private -> Nadie puede hacer uso de este sistema ni siquiera los hijos que hereden de mi.

// Podemos crear propiedades, metodos y constantes.
//Cuando escribimos el encapsulamiento garantizamos la integridad de los datos. 

class User 
{
    //constante
    public const PAGINATE = 25;

    //método
    public $username;

    //función
    public function getUserName()
    {
        //
    }
}

Excelente

modificadores de acceso
public => Es la que todo el mundo tiene acceso.
protected => Solo tiene acceso la clase, su instancia y las que hereden de ella.
private => Solo tiene acceso la clase en su mismo ámbito.