В настоящее время у меня есть довольно большое приложение, полностью написанное на процедурном PHP. Я хочу расширить свой опыт работы с PHP и перекодировать большую часть своего приложения с использованием объектно-ориентированных методов.
Есть много областей, где ООП может помочь уменьшить объем кода и облегчить его чтение. Однако у меня есть несколько вопросов.
1) Насколько я понимаю, один класс используется в качестве схемы для любого количества объектов, но любой класс представляет только один объект, а не более одного. Таким образом, один класс может представлять игрока, но не несколько игроков.
2) Поскольку мне нужно будет включить довольно много разных классов, использовать ли класс "Loader" для загрузки их всех с помощью spl_autoload_register
или просто использовать spl_autoload_register
в файлах программы для моего приложения?
Редактировать: Таким образом, мой автозагрузчик будет классом, экземпляр которого я затем создам для запуска автозагрузки, или просто файлом php с функцией и регистром spl_autoload_register, который я бы включил, чтобы избежать повторения одного и того же кода в нескольких файлы?
3) Некоторые из моих классов зависят от других классов. Я никогда не сталкивался с этим раньше, поэтому я, честно говоря, не знаю ответа. Если я включу все классы в свой основной файл программы, но мой класс проигрывателя не включает класс, который ему нужен для работы, будет ли класс проигрывателя работать, поскольку основная программа включает класс, от которого зависит проигрыватель? на?
Изменить: Таким образом, даже если один класс может создавать экземпляр объекта типа Player, и класс Player не включен напрямую в этот класс, он все равно будет работать, поскольку класс контроллера делает включить класс Player?
4) Есть несколько случаев, когда мне нужно работать над объектами, которые я создаю. Я задаюсь вопросом, как мне это сделать. Например, в моем классе Player мне иногда нужно отправить что-то от одного Player к другому Player. Итак, должен ли я реализовать статический метод в классе Player, который принимает двух игроков в качестве параметров и выполняет передачу, или я делаю что-то еще?
Изменить. Хорошо, поэтому избегайте статических методов. Теперь у меня есть серьезная проблема: у меня есть методы, которые запускаются несколько раз в моем приложении, но я не могу реализовать их как статические методы. Должен ли я реализовать их как методы экземпляра? Например, отправка от одного плеера к другому. Должен ли я создать метод экземпляра, который берет объект Player и отправляет его либо в, либо из?
5) У меня есть много методов, которые на самом деле не принадлежат ни одному экземпляру класса и не подходят в качестве статических методов. Должны ли они быть объявлены в своем собственном классе как статические методы, такие как Common или аналогичные? Что делается на практике в этой ситуации?
Редактировать. Будут ли эти методы принадлежать конкретному файлу приложения, для которого они используются, или, возможно, сохранены в собственном файле «functions.php»?
6) Я хотел бы научиться использовать пространства имен, но мой код никогда не будет использоваться другими, и я никогда не буду использовать чужой код в своем приложении. Являются ли пространства имен ненужным дополнением в моем приложении или было бы неплохо научиться их использовать? Независимо от того, имеет ли одно приложение одно пространство имен (имя приложения?) или каждый класс принадлежит своему собственному пространству имен?
7) Наконец, часто ли используется один класс для соединений с базой данных, а также класс для сетевых методов? Моему приложению нужны оба. Я думаю, что основная проблема, с которой я столкнулся при преобразовании моего кода для использования объектно-ориентированных методов, заключается в определении того, какие методы куда поместить, так как в настоящее время все они находятся в одном монолитном файле.
Спасибо за любую помощь и понимание, которое вы можете предоставить.