No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Alcance o Encapsulamiento

8/19
Recursos

Aportes 28

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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.

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

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.

Abstracci贸n y alcance, resuelve muchos problemas de seguridad en los login

La verdad batalle mucho con el tema de constantes d谩ndoles diferentes tipos de alcance 馃槮
Comparto mi apunte de la clase de hoy con los resultados comentados.
.
Base

<?php

/*
  El alcance o encapsulamiento define la visibilidad que tendra una propiedad, constante o m茅todo de una clase...
  Dependera del alcance para que algo pueda ser accedido desde uno u otro lugar por ejemplo, otro archivo, clase heredada o misma clase.
  Los tipos de alcances son:
  - public: Si se usa un alcance de este tipo, la propiedad, constante o m茅todo podra ser le铆do, accedido o modificado desde cualquier parte de nuestro sistema.

  - private: Si se usa este tipo de alcance, la propiedad, constante o m茅todo solo podra ser le铆do desde la misma clase donde se esta declarando, es decir, no se podra editar desde fuera de la clase.

  - protected: Si se usa este tipo de alcance, es muy similar al 'private' ya que solo puede ser accedido desde la misma clase PERO, si una clase hereda de la clase principal, esta clase hija podra acceder a las propiedades, constantes y m茅todos de la clase.

*/

// Declarando una clase con propiedades, constantes y m茅todos de un alcance diferente
class Basee{

  // Definiendo propiedades y constantes
  public $namePublic = "Joel Publico";
  private $namePrivate = "Joel Private";
  protected $nameProtected = "Joel Protected";

  public const agePublic = 22;
  private const agePrivate = 32;
  protected const ageProtected = 42;

  // Definiendo m茅todos
  function saludarProtected(){
    echo "隆Hola, mi nombre protected es: $this->nameProtected y mi edad protected es: ".$this::ageProtected;
  }
}

?>

.
Cached

<?php

include_once('Basee.php');

// Creando una clase que herede de 'Base'
class Cached extends Basee{

  public function saludarCached(){
    echo "Hola, estoy desde cached!";
  }

}

// Creando una instancia de la clase 'cached'
$cached1 = new Cached;

// Accediendo a propiedades del la clase heredada 'Basee'
echo $cached1->namePublic . "\n"; // Joel Publico
echo $cached1->namePrivate . "\n"; // Notice: Undefined property: Cached::$namePrivate
echo $cached1->nameProtected . "\n"; // Fatal error: Uncaught Error: Cannot access protected property Cached::$nameProtected


// Accediendo a constantes de la clase heredada 'Base'
echo $cached1::agePublic . "\n"; // 22
echo $cached1::agePrivate . "\n"; // Fatal error: Uncaught Error: Undefined class constant 'agePrivate'
echo $cached1::ageProtected . "\n"; // Fatal error: Uncaught Error: Cannot access protected const Cached::ageProtected


// Accediendo a los m茅todos de la clase heredada 'Base'
$cached1->saludarProtected(); // 隆Hola, mi nombre protected es: Joel Protected y mi edad protected es: 42
echo "\n";


// Accediendo al m茅todo de la clase 'Cached'
$cached1->saludarCached(); // Hola, estoy desde cached!
echo "\n";


?>

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.

Tipo de Alcance:

  1. Public : Son los m茅todos que pueden ser accedidos a lo largo de 鈥渢odo鈥 el sistema.
  2. Protected : Solo pueden acceder a los elementos de clases de aquellas clases que hereden de la clase.
  3. Private : Los elementos propios de la clases solo ser谩n usados dentro de la clase. Nadie podr谩 ser uso de los m茅todos, ni si quiera las clases que hereden de la misma.

Creo que voy a ser el grinch de este curso pero esperaba ver ejemplo completos de los alcances y no solo ver como escriben un comentario con cada uno.

馃崈 En PHP, los modificadores de acceso son palabras clave que se utilizan para definir la visibilidad de las propiedades y m茅todos dentro de una clase. Hay tres tipos de modificadores de acceso en PHP: public, private y protected.

  • Public: Las propiedades y m茅todos p煤blicos pueden ser accedidos desde cualquier lugar, ya sea desde dentro de la clase o desde fuera de ella. Esto significa que puedes acceder a las propiedades y m茅todos p煤blicos desde cualquier instancia de la clase o desde una clase que herede de ella.
  • Private: Las propiedades y m茅todos privados s贸lo pueden ser accedidos desde dentro de la clase donde se declaran. Esto significa que no se puede acceder a las propiedades y m茅todos privados desde fuera de la clase, ni siquiera desde una clase que herede de ella.
  • Protected: Las propiedades y m茅todos protegidos s贸lo pueden ser accedidos desde dentro de la clase donde se declaran o desde una clase que herede de ella. Esto significa que no se puede acceder a las propiedades y m茅todos protegidos desde fuera de la clase.

En resumen, la diferencia principal entre los modificadores de acceso es la visibilidad de las propiedades y m茅todos dentro de una clase y en clases que hereden de ella. Si una propiedad o m茅todo es p煤blico, se puede acceder a ella desde cualquier lugar; si es privado, s贸lo se puede acceder desde dentro de la clase; y si es protegido, se puede acceder desde dentro de la clase o desde una clase que herede de ella.

Alcance o Encapsulamiento

Tambi茅n llamados Modificadores de Acceso.

Las propiedades y m茅todos pued tener modificadores de acceso los cuales controlan donde pueden ser accedidos.

Existen 3 modificadores de acceso:

  • public - La propiedad o m茅todo pueden ser accedidos donde sea. Esta es predeterminada.

  • protected - La propiedad o m茅todo pueden ser accedidos dentro de la clase y sus clases derivadas de ella (clases secundarias).

  • private - La propiedad o m茅todo SOLAMENTE pueden ser accedidos dentro de la clase.

Alcance, hace referencia al encapsulamiento o principio de ocultamiento.
Tipo de alcance:

  1. Public. (p煤blico)
  2. Protected. (protegido)
  3. Private. ( privado)
    Lo 煤nico que necesitamos entender aqu铆 es que nosotros queremos mantener la integridad de los datos.
    Alcance es b谩sicamente ese tipo de conceptos que utilizamos y ni siquiera sabemos que se llama alcance , principio de ocultaci贸n o encapsulamiento.
    Cuando defines p煤blico, protegido y privado garantizas la integridad de los datos.

Resumen de la clase

<?php
class User{
    //public
    //protected
    //private
    public const PAGINATE = 25;
    public $name;
    //protected $name;
    //private $name;

    public function getUsername(){
        
    }
}


?>

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.