No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17 Días
7 Hrs
58 Min
50 Seg

Alcance o Encapsulamiento

8/19
Recursos

Aportes 34

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

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.

Parece que el orden de los temas no es el mas adecuado, obte por buscar otros cursos y despues volver para entenderlo, esta bien reforzar la informacion con otras fuentes.
*//public ->Se pueden acceder en cualquier parte del sistema.*    *//protected ->Solo pueden acceder a los elementos de mi clase aquellos que hereden de mi.*    *//private -> Nadie puede acceder a elementos de mi clase, solo yo mismo.*
Esta fuerte la vaina..
Este curso tiene un error y no explicar algunos detalles peque;os, como POR QUE se utiliza el public const(Para que funciona el const?) en el minuto 1:37

Mis apuntes:

<?php 

class User {
    // Alcances: 
    // public: Accesible desde cualquier lugar, tanto dentro como fuera de la clase.
    // protected: Accesible dentro de la clase y por herencia.
    // private: Accesible únicamente dentro de la clase que lo define.

    // Constante pública, accesible desde cualquier lugar.
    public const PAGINATE = 25; 

    // Propiedad pública, accesible desde cualquier lugar.
    public $username; 

    // Propiedades privadas y protegidas para ilustrar.
    // private $pass; 
    // protected $email; 

    // Método público para obtener el nombre de usuario.
    public function getUsername(){
        return $this->username;
    }

    // Método protegido que podría ser usado por clases derivadas.
    protected function getPassword(){
        // Código para obtener la contraseña...
    }

    // Método privado, solo accesible desde dentro de la clase.
    private function getEmail(){
        // Código para obtener el correo electrónico...
    }
}

// Ejemplo de uso:

$user = new User();
$user->username = "john_doe";
echo $user->getUsername(); // Imprimirá "john_doe"

// No se puede acceder directamente a propiedades privadas o protegidas desde fuera de la clase.
// $user->pass = "password"; // Esto daría un error.

?>
```js username; } } $usuario = new User; $usuario -> username ='Diego'; echo $usuario -> get(); ```

Tipo de Alcance:

  1. Public : Son los métodos que pueden ser accedidos a lo largo de “todo” 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—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.