tutorial example ejemplos classes __construct php class oop constructor

example - php classes tutorial



Propósito de los constructores de PHP (5)

Aprende con el ejemplo:

class Person { public $name; public $surname; public function __construct($name,$surname){ $this->name=$name; $this->surname=$surname; } }

¿Por qué es esto útil? Porque en lugar de:

$person = new Person(); $person->name=''Christian''; $person->surname=''Sciberras'';

puedes usar:

$person = new Person(''Christian'',''Sciberras'');

¡Lo cual es menos código y parece más limpio!

Nota: Como las respuestas a continuación indican correctamente, los constructores / destructores se usan para una amplia variedad de cosas, incluyendo: de / inicialización de variables (especialmente cuando el valor es variable), memoria de / asignación, invariantes (podrían ser superadas) y código limpiador También me gustaría señalar que el "código limpio" no es solo "azúcar", sino que mejora la legibilidad, la capacidad de mantenimiento, etc.

Estoy trabajando con clases y estructura de clase de objeto, pero no en un nivel complejo, solo clases y funciones, y luego, en un solo lugar, creación de instancias.

En cuanto a __construct y __destruct , díganme simplemente: ¿cuál es el propósito de constructores y destructores ?

Conozco la explicación teórica del nivel de la escuela, pero espero algo así como en el mundo real, como en qué situaciones debemos usarlas.

Provea también un ejemplo, por favor.

Saludos


Descubrí que era más fácil de entender cuando pensaba en la palabra clave new ante el constructor: simplemente le dice a mi variable que se le otorgaría un nuevo objeto de su tipo de datos, en función del constructor al que llamo y de lo que transfiero a él. , Puedo definir el estado del objeto a la llegada.

Sin el nuevo objeto, estaríamos viviendo en la tierra del null , ¡y los accidentes!

El Destructor es más obvio desde un punto de vista de C ++, donde si no tienes un método destructor borra toda la memoria apuntada, se mantendrá utilizado después de que el programa salga causando fugas y lag en el sistema operativo del cliente hasta el próximo reinicio.

Estoy seguro de que hay información más que suficiente aquí, pero otro ángulo siempre es útil por lo que he notado.


El constructor de una clase define qué sucede cuando crea una instancia de un objeto de esta clase. El destructor de una clase define qué sucede cuando destruyes la instancia del objeto.

Consulte el Manual de PHP sobre Constructores y Destructores :

PHP 5 permite a los desarrolladores declarar métodos de construcción para las clases. Las clases que tienen un método constructor llaman a este método en cada objeto recién creado, por lo que es adecuado para cualquier inicialización que el objeto pueda necesitar antes de usarlo.

y

PHP 5 presenta un concepto de destructor similar al de otros lenguajes orientados a objetos, como C ++. Se llamará al método destructor tan pronto como se eliminen todas las referencias a un objeto en particular o cuando el objeto se destruya explícitamente o en cualquier orden en la secuencia de apagado.

En la práctica, utiliza el Constructor para poner el objeto en un estado válido mínimo. Eso significa que asigna argumentos pasados ​​al constructor a las propiedades del objeto. Si su objeto utiliza algún tipo de tipo de datos que no se pueden asignar directamente como propiedad, puede crearlos aquí, por ej.

class Example { private $database; private $storage; public function __construct($database) { $this->database = $database; $this->storage = new SplObjectStorage; } }

Tenga en cuenta que para mantener sus objetos comprobables, un constructor no debe hacer ningún trabajo real :

Trabajar en el constructor como: crear / inicializar colaboradores, comunicarse con otros servicios y lógica para configurar su propio estado elimina las costuras necesarias para las pruebas, obligando a las subclases / burlas a heredar comportamientos no deseados. Demasiado trabajo en el constructor evita la creación de instancias o la alteración de los colaboradores en la prueba.

En el Example anterior, la $database es un colaborador. Tiene un ciclo de vida y un propósito propio y puede ser una instancia compartida. No crearías esto dentro del constructor. Por otro lado, SplObjectStorage es una parte integral de Example . Tiene el mismo ciclo de vida y no se comparte con otros objetos. Por lo tanto, está bien que lo new en el ctor.

Del mismo modo, utiliza el destructor para limpiar después de su objeto. En la mayoría de los casos, esto no es necesario porque PHP lo maneja automáticamente. Esta es la razón por la que verá mucho más ctors que dtors en la naturaleza.


El constructor se ejecuta en el momento en que crea una instancia de su clase. Entonces si tienes una clase Person :

class Person { public $name = ''Bob''; // this is initialization public $age; public function __construct($name = '''') { if (!empty($name)) { $this->name = $name; } } public function introduce() { echo "I''m {$this->name} and I''m {$this->age} years old/n"; } public function __destruct() { echo "Bye for now/n"; } }

Demostrar:

$person = new Person; $person->age = 20; $person->introduce(); // I''m Bob and I''m 20 years old // Bye for now

Podemos anular el valor predeterminado establecido con la inicialización a través del argumento constructor:

$person = new Person(''Fred''); $person->age = 20; $person->introduce(); // if there are no other references to $person and // unset($person) is called, the script ends // or exit() is called __destruct() runs unset($person); // I''m Fred and I''m 20 years old // Bye for now

Con suerte, eso ayuda a demostrar dónde se llaman el constructor y el destructor, para qué sirven?

  1. __construct() puede miembros de clase predeterminados con recursos o estructuras de datos más complejas.
  2. __destruct() puede liberar recursos como archivos y manejadores de bases de datos.
  3. El constructor se usa a menudo para la composición de clase o la inyección de constructor de las dependencias requeridas .

Un constructor es una función que se ejecuta después de que el objeto se haya inicializado (su memoria asignada, las propiedades de la instancia copiadas, etc.). Su objetivo es poner el objeto en un estado válido.

Con frecuencia, un objeto, para estar en un estado utilizable, requiere algunos datos. El propósito del constructor es forzar que estos datos se den al objeto en el momento de la instanciación y no permitir ninguna instancia sin dichos datos.

Considere una clase simple que encapsula una cadena y tiene un método que devuelve la longitud de esta cadena. Una posible implementación sería:

class StringWrapper { private $str; public function setInnerString($str) { $this->str = (string) $str; } public function getLength() { if ($this->str === null) throw new RuntimeException("Invalid state."); return strlen($this->str); } }

Para estar en un estado válido, esta función requiere que se llame a getLength antes de getLength . Al usar un constructor, puede forzar que todas las instancias estén en buen estado cuando se getLength :

class StringWrapper { private $str; public function __construct($str) { $this->str = (string) $str; } public function getLength() { return strlen($this->str); } }

También puede mantener setInnerString para permitir que la cadena se setInnerString la setInnerString de instancias.

Se llama a un destructor cuando un objeto está a punto de liberarse de la memoria. Por lo general, contiene un código de limpieza (por ejemplo, el cierre de los descriptores de archivo que contiene el objeto). Son raros en PHP porque PHP limpia todos los recursos mantenidos por el script cuando finaliza la ejecución del script.