-1

Уже изучил функциональный подход к созданию проектов на php. Пытаюсь изучать ООП, но абсолютно не понимаю, как выстраивать логику вокруг ооп. Даже MVC не так сложно было. Подскажите что-нибудь.

1 Answers1

0

объяснить ООП и 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. конструктивная критика приветствуется

puffleeck
  • 1,471