Estoy un poco confundido sobre cómo funcionan los constructores en PHP.Constructores PHP y funciones estáticas
Tengo una clase con un constructor al que se llama cuando instancia un nuevo objeto.
$foo = new Foo($args);
__construct($params)
se llama en la clase Foo
y ejecuta el código de inicialización correcto.
Sin embargo, cuando uso la clase para llamar a una función estática, se llama al constructor de nuevo.
$bar = Foo::some_function(); //runs the constructor from Foo
Esto hace que el constructor para ejecutar, ejecutar el código objeto de inicialización que tenía la intención sólo para cuando se crea un nuevo objeto Foo
.
¿Me falta el sentido de cómo funcionan los constructores? ¿O hay alguna manera de evitar que se ejecute __construct()
cuando uso la clase para hacer llamadas a funciones estáticas?
¿Debo usar una función "fábrica" para hacer la inicialización del objeto? Si es así, ¿cuál es el punto del constructor entonces?
:: EDIT :: Tengo un formulario donde los usuarios pueden subir fotos a un álbum (create_photo.php) y un área donde pueden ver el álbum (view_photos.php). Al enviar el formulario:
$photo = new Photo($_FILES['photo'], $_POST['arg1'], ect..);
El constructor de Foto crea y guarda la foto. Sin embargo, en view_photo.php, cuando llamo a:
$photo = Photo::find_by_id($_POST['id']) //user-defined function to query database
¡Esto está provocando que el constructor de Photo se ejecute!
Eso no puede estar bien. Proporcione el código completo donde el constructor recibe una llamada estática. – mAu
Muestra tu código real. Lo que estás escribiendo no parece correcto. –
¿Cómo se ve el constructor, desde qué comportamiento concluyes que se ejecuta? – markus