You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

1 Días
17 Hrs
47 Min
9 Seg

Alcance o Encapsulamiento

8/19
Resources

What is scoping in object-oriented programming?

Understanding scoping in programming is key for any developer looking to create robust and secure applications. Scope defines the accessibility of properties and methods within a class, ensuring data integrity and preventing unauthorized modifications. This concept is closely related to encapsulation, also known as the principle of hiding. Let's see how it is implemented in PHP.

How are scope types defined?

In PHP, there are three main scope types:

  • Public: elements defined as public are accessible from anywhere in the code. This means that both classes and other files can access these elements.

  • Protected: These elements can only be accessed by the class that defines them and its subclasses. This is an effective way to allow derived classes to interact with certain data without exposing it completely.

  • Private: Private elements are accessible exclusively within the class that declares them. Not even subclasses can access these methods or properties.

A concrete example would be to define different scopes for properties and constants within a user class:

class User { public const PAGINATION = 25; public $username; protected $email; private $password;}

How is encapsulation implemented?

Encapsulation is a pillar of object-oriented programming that seeks to protect the data and functions of a class from external modification. By defining properties and methods with different levels of access, we achieve precise control over how and where those elements can be used. Let's see how we could use this concept in a class:

class User { public $username; protected $email; private $password;
 public function getUsername() { // Code to get the username }}

Why is scope definition important?

Defining the scope correctly is crucial for several reasons:

  • Data integrity: By restricting access to certain data, we can prevent unauthorized modifications that could lead to inconsistencies or errors in the system.

  • Security: Elements such as passwords must be protected (or privatized) so that they cannot be altered directly from outside the system.

  • Maintainability: Code with good use of encapsulation is easier to maintain and understand, as it limits complexity by hiding unnecessary details from other parts of the system.

When to use each type of scope?

The use of scopes depends on the specific needs of the system and the software design:

  • Use public when you need a property or method to be accessible from anywhere.
  • Choose protected when you want the functionality to be visible and modifiable by derived classes, but not by external classes.
  • Choose private when the attribute or method should not be seen or altered except within its own class.

In summary, understanding scope and encapsulation is critical for any programmer who wants to write clean, efficient and safe code. Properly choosing the right access type can make the difference between a vulnerable application and an audited, stable application.

Contributions 34

Questions 4

Sort by:

Want to see more contributions, questions and answers from the community?

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.