Я немного запутался в том, как работают конструкторы в PHP.
У меня есть класс с конструктором, который вызывается при инстанцировании нового объекта.
$foo = new Foo($args);
__construct($params)
вызывается в классе Foo
и выполняет соответствующий код инициализации.
Однако когда я использую класс для вызова статической функции, конструктор вызывается снова.
$bar = Foo::some_function(); //runs the constructor from Foo
Это заставляет конструктор выполняться, запуская код инициализации объекта, который я предназначал только для создания нового объекта Foo
.
Я не понимаю, как работают конструкторы? Или есть способ предотвратить выполнение __construct()
, когда я использую класс для вызова статических функций?
Должен ли я вместо этого использовать функцию "фабрики" для инициализации объекта? Если да, то в чем тогда смысл конструктора?
::EDIT:: У меня есть форма, где пользователи могут загружать фотографии в альбом (create_photo.php) и область, где они могут просматривать альбом (view_photos.php). При отправке формы:
$photo = new Photo($_FILES['photo'], $_POST['arg1'], ect..);
Конструктор Photo создает и сохраняет фотографию. Однако в view_photo.php, когда я вызываю:
$photo = Photo::find_by_id($_POST['id']) //user-defined function to query database
Это вызывает запуск конструктора Photo!