¿Cuándo usar clases estáticas vs instanciadas en PHP?

Requisito previo: función estática PHP

En PHP, podemos tener clases tanto estáticas como no estáticas (instanciadas).

clase estática

Introducción: una clase estática en PHP es un tipo de clase que se instancia solo una vez en un programa. Debe contener un miembro estático (variable) o una función de miembro estático (método) o ambos. Se accede a las variables y métodos sin la creación de un objeto, utilizando el operador de resolución de ámbito (::). Pero aquí hay un problema, que el método estático no puede acceder a las variables no estáticas porque eso requerirá la creación del objeto primero. Entonces, para acceder a las variables de una clase estática, debemos declararlas como estáticas usando la palabra clave estática .

Ejemplo 1:

<?php
class Class_name {
      
    // Static variable and static function
    // using static keyword
    public static $var = "text";
      
    public static function func() {
        echo self::$var;
    }
}
  
Class_name::func();
?>
Producción:

text

Ejemplo 2: Este ejemplo comprueba si una string creada tiene una longitud mayor o igual a 7 o no.

<?php
  
class GFG
{
    // Static variable
    public static $num1 = 7;
  
    // Static function
    public static function check($var)
    {
        // Accessing static variable using
        // self keyword
        if(strlen($var) >= self::$num1)
            return true;
        else
            return false;
    }
}
  
// String is created
$str = "GeeksforGeeks";
  
// Static function is called 
// using scope resolution operator
if(GFG::check($str))
    echo "String is valid!";
else
    echo "String is NOT valid!";
      
?>
Producción:

String is valid!

Clase instanciada (no estática)

Introducción: Instanciar significa crear una instancia de un objeto en la memoria del servidor. Las clases instanciadas son aquellas clases que requieren que se cree un objeto antes de llamar a sus variables y métodos. Es similar a una clase normal utilizada en C++, Java y otros lenguajes de programación. Estas clases se pueden instanciar más de una vez y contienen valores únicos para cada uno de sus objetos.

Ejemplo 1:

<?php
class GFG {
      
    // non-static variable
    // and function
    public $var = "text";
    public function func()
    {
        echo $this->var;
    }
}
  
$test = new GFG();
$test->func();
  
?>
Producción:

text

Ejemplo 2: Este programa verifica si una longitud de string creada es mayor o igual a 7 o no.

<?php
class GFG {
      
    // Non-static variable
    public $num1 = 7;
  
    // Non-Static function
    public function check($var)
    {
        if(strlen($var) >= $this->num1)
            return true;
        else
            return false;
    }
}
  
// Object 1 is created
$str1 = new GFG();
if ($str1->check("GeeksforGeeks"))
    echo "String is valid!";
else
    echo "String is NOT valid!";
  
// Object 2 is created
$str2 = new GFG();
if ($str2->check("Geeks"))
    echo "String is valid!";
else
    echo "String is NOT valid!";
      
?>
Producción:

String is valid!
String is NOT valid!

Clase estática frente a clase instanciada

  • La clase estática se usa para una sola instancia de esa clase, mientras que la clase instanciada se usa cuando se requiere más de una instancia.
  • La clase estática contiene variables estáticas y métodos estáticos, mientras que la clase instanciada contiene variables no estáticas y métodos no estáticos.
  • Los programas que tienen clases estáticas son difíciles de probar y extender, mientras que los programas con clases no estáticas proporcionan propiedades de prueba y extensión fáciles.
  • Los datos se relacionan principalmente con la clase en sí misma en el caso de una clase estática, mientras que en el caso de una clase instanciada, los datos se relacionan con el objeto respectivo, no con la clase en sí.
  • ¿Cuándo usar qué?
    Considere usar la clase estática si alguna de estas declaraciones se aplica a la situación:

    • La funcionalidad de los métodos y variables de una clase es general (global) .
    • Cuando desee que un campo o variable respectivo tenga el mismo valor entre instancias o cuando desee una instancia única de esa clase.
    • Al crear un singleton (tipo particular de clase que se puede instanciar solo una vez) o una clase de utilidad (ayudante).
    • Cuando cada objeto tiene los mismos datos y requiere crear una clase que solo funcione con estos datos, entonces se puede usar la clase estática.
    • No se requieren pruebas (principalmente unidades) o mantenibilidad .

    Considere usar la clase instanciada si alguna de estas declaraciones se aplica a la situación:

    • La funcionalidad de la clase no es global o puede haber más de una instancia de esa clase.
    • Cuando cada objeto de la clase tiene sus propios datos únicos (como ID de correo electrónico).
    • Se requieren pruebas y mantenibilidad.

    Ejemplo: considere que en el caso de una tienda, las facturas generadas por artículos de compra contienen el nombre de los artículos, el costo de cada artículo, el costo total, la fecha, el nombre de la tienda, el número de tienda registrado, la dirección, etc. Aquí, para diferentes clientes que compran diferentes artículos el valor del nombre del artículo, costo total, fecha, etc será diferente. Entonces, estos se pueden obtener usando una clase instanciada donde cada cliente se representa como un objeto de esa clase y cada objeto tendrá diferentes atributos. Pero el nombre de la tienda, el número de tienda registrado, el costo del artículo respectivo y la dirección serán los mismos para todos los clientes. Entonces, aquí la clase estática se puede usar para instanciar todos estos valores una vez y luego se pueden usar muchas veces.

Publicación traducida automáticamente

Artículo escrito por BhavikBothra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *