Сначала спросите себя, что будет представлять этот объект? Экземпляр объекта хорош для работы с отдельными наборами динамических данных.
Хорошим примером может быть уровень абстракции ORM или базы данных. У вас может быть несколько соединений с базой данных.
$db1 = new Db(array('host' => $host1, 'username' => $username1, 'password' => $password1));
$db2 = new Db(array('host' => $host2, 'username' => $username2, 'password' => $password2));
Эти два соединения теперь могут работать независимо:
$someRecordsFromDb1 = $db1->getRows($selectStatement);
$someRecordsFromDb2 = $db2->getRows($selectStatement);
Теперь в этом пакете / библиотеке могут быть другие классы, такие как Db_Row и т. д., чтобы представить определенную строку, возвращаемую из инструкции SELECT. Если этот класс Db_Row был статическим классом, тогда предполагается, что у вас есть только одна строка данных в одной базе данных, и было бы невозможно сделать то, что мог бы сделать экземпляр объекта. С экземпляром теперь вы можете иметь неограниченное количество строк в неограниченном количестве таблиц в неограниченном количестве баз данных. Единственным ограничением является аппаратное обеспечение сервера;).
Например, если метод getRows объекта Db возвращает массив объектов Db_Row, вы можете теперь работать с каждой строкой независимо друг от друга:
foreach ($someRecordsFromDb1 as $row) {
// change some values
$row->someFieldValue = 'I am the value for someFieldValue';
$row->anotherDbField = 1;
// now save that record/row
$row->save();
}
foreach ($someRecordsFromDb2 as $row) {
// delete a row
$row->delete();
}
Хорошим примером статического класса будет то, что обрабатывает переменные реестра или переменные сеанса, поскольку для каждого пользователя будет только один реестр или один сеанс.
В одной части вашего application:
Session::set('someVar', 'toThisValue');
И в другой части:
Session::get('someVar'); // returns 'toThisValue'
Поскольку каждый сеанс только один раз будет за один сеанс, нет смысла создавать экземпляр для сеанса.
Надеюсь, это поможет вместе с другими ответами помочь разобраться. В качестве примечания обратите внимание на «сцепление » и « соединение ». Они описывают некоторые очень и очень хорошие практики, которые следует использовать при написании кода, применимого ко всем языкам программирования.