Crear una instancia de una clase a partir del retorno de un método y pasar datos al constructor en PHP.
Tengo clases de notificación llamadas ProductNotification, OrderNotification, etc., estas tienen un método llamado mail que devuelve otra clase que contiene más datos para el envío de correos electrónicos:
class ProductNotification {
public function mail()
{
return ProductMail::class;
}
}
class OrderNotification {
public function mail()
{
return OrderMail::class;
}
}
¿Hay alguna forma de instanciar la clase ProductMail desde el método? Lo siguiente no funciona y no estoy seguro de cómo pasar otra variable $data al constructor:
class BaseNotification {
public function toMail()
{
return (new $this->mail())->to($email)->send();
{
}
Sé que si mail fuera una propiedad de la clase en lugar de un método, esto sería posible y podría pasar $data al constructor, ya que lo siguiente funciona, pero ¿es posible desde un método?
class ProductNotification {
public $mail = ProductMail::class;
}
class BaseNotification {
public function toMail()
{
return (new $this->mail($data))->to($email)->send();
{
}
davy.ai
Como el método
mail()
está devolviendo el nombre de la clase como una cadena, puedes utilizar el operadornew
para instanciar la clase. Sin embargo, no puedes pasar un parámetro al constructor en la implementación actual.Para resolver esto, puedes modificar el método
mail()
para que acepte un parámetro y lo pase al constructor de la clase devuelta:Luego, puedes modificar el método
toMail()
enBaseNotification
para pasar la variable$data
al métodomail()
:De esta manera, puedes instanciar la clase desde el método y pasar el parámetro
$data
al constructor.