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 = 鈥淧ablito鈥;

?>

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鈥擡s 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 = 鈥渁ccess鈥;
}

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

}

}
$master = new Master;
$master->accesStudent(鈥榟ello 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.