Уже изучил функциональный подход к созданию проектов на php. Пытаюсь изучать ООП, но абсолютно не понимаю, как выстраивать логику вокруг ооп. Даже MVC не так сложно было. Подскажите что-нибудь.
-
Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете. – Дух сообщества Oct 13 '22 at 10:35
-
Возможный дубликат вопроса: Книги и учебные ресурсы по PHP – Алексей Шиманский Oct 13 '22 at 10:45
-
2Читайте книги. А объяснить ООП и MVC в двух словах так, чтобы вы поняли - невозможно – Алексей Шиманский Oct 13 '22 at 10:46
1 Answers
объяснить ООП и MVC в двух словах так, чтобы вы поняли - невозможно
подержите моё пиво
дисклеймер: я лучше знаком с js ООП чем с его php версией, потому объяснять попробую на примерах js кода, либо примерами с обоих.
ООП оперирует объектами, потому начать стоит с их конструкции и возможностей.
простейший объект грубо говоря тоже самое что и массив, с возможностью пихать анонимные функции в его элементы, такие функции в объектах называются методами и могут оперировать с содержимым своего объекта через оператор this. для оперирования содержимым другого объекта\класса нужно обращаться через его имя. echo $className->value; echo $className->method();
var x =
{
a: 1,
b: 2,
c: function() {alert('вы вызвали x.c();')},
d: function() {alert(this.a);},
e: function() {alert(this.a + this.b)}
}
<input type='button' onclick='x.c();' value='x.c()'/>
<input type='button' onclick='x.d();' value='x.d()'/>
<input type='button' onclick='x.e();' value='x.e()'/>
на php +- тоже самое будет выглядеть так(возможны ошибки):
class x{
public $a = 1;
public $b = 2;
function c(){echo 'вы вызвали $x->c();';}
function d(){echo $this->a;}
static function e(){echo $this->a + $this->b;}
}
$x->c();
$x->d();
$x::e();
в простом пет проекте можно тупо запихнуть весь код в один объект. в таком виде на js читабельность объявлений кмк слегка поднимится, но в остальной код скорее наоборот разбухнет. в php же и объявления и код разбухнут, но оно того стоит.
инкапсуляция:
если запала на написание всего проекта разом нехватает, или работаешь совместно с кем-то, есть риск перезаписи одинаковых переменных. обращение к чему либо через this гарантирует что вызываемое нечто находится именно внутри текущего объекта. а это позволяет при появлении какой либо идеи, сразу влететь в IDE с двух ног и забив на весь ранее написанный код с его ворохом переменных, просто создать новый объект\класс и писать в нём все что душе угодно, без страха что где-то там что-то перезапишется и развалится =)
в php есть еще всякие внутри-объектные приставки: private, static, public. если в двух словах, они меняют видимость свойств и методов(мб и в js есть внутри-объектные, просто я до них пока еще не добрался, но вне-объектные точно есть: var, let, const).
есть еще наследование\мутирование\прототипирование. по сути это подобие слияния массивов, но с нюансами конечно =)
конструктор. метод со специфичным именем который выполняется сразу при создании объекта\класса || прототипа\экземпляра класса, в нём можно копировать методы и свойства в текущий объект\класс из других, реализуя таким образом мутирование. при том сохраняя как минимум часть методов\свойств изначального класса(наследование).
ну как то так.
p.s. конструктивная критика приветствуется
- 1,471