«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/05/02 03:39:14  №1392888 1
Аноны, я выучил PHP со всеми этими ООП и теперь могу писать свои велосипедные сайты.

Скажите, изучать Laravel сложнее, чем всё то, что я уже изучил? Или будет проще?
Ответы: >>1392905 >>1393253 >>1394576
Аноним 2019/05/02 06:21:20  №1392905 2
>>1392888
>Скажите, изучать чем всё то, что я уже изучил?
Откуда мы знаем что тебе будет проще? Это же всё индивидуально.

Берешь изучаешь. Если что-то не понятно сюда задаешь вопрос по языку, а не психологии.

>Или будет проще?
Будет проще, если начнешь изучать.

Вообще, вот тебе совет... (В информатике) первым шагом перед решением задачи, это сбор информации и оценка сил и времени на это задачу.

Поищи примеры/посмотри на ютюбе... Научись самостоятельно добывать информацию.
Аноним 2019/05/02 23:17:08  №1393253 3
>>1392888
>Аноны, я выучил PHP со всеми этими ООП
Это примерно несколько сотен строк достаточно примитивного кода в процедурном стиле из разряда сел и написал в один файл скрипт.

>Скажите, изучать Laravel сложнее, чем всё то, что я уже изучил? Или будет проще?
Это несколько тысяч строк достаточно нетривиального кода, размещенного в сотне взаимосвязанных файлов, архитектура mvc и паттерны проектирования.

Ответы: >>1393254
Аноним 2019/05/02 23:26:13  №1393254 4
>>1393253
Благодарю за понятный мне ответ.
Аноним 2019/05/05 15:32:06  №1394576 5
>>1392888

Будет сложнее, но я советовал бы поковырять код Ларавел, чтобы учиться дальше.

>>1393246
>>1387082

> раздут мой код или нет

Нет.

> Сделать в департаменте массив из работников, который будет содержать в себе все виды работников? Не совсем понял где тогда создавать работников, ведь я вызывал метод

Снаружи департамента. Удобно сделать метод найма работника в департамент и в него передавать созданных работников. При таком подходе, как создаются работники, департамент не волнует - он принимает уже готовых. Разделение ответственности.

$saleDep = new Department(..);
$ivan = new Engineer(...);
$saleDep->employ($ivan);

> Правильно ли я понимаю, что желательно для всех свойств класса ставить protected/private, а для считывания/записи нужно делать public методы с проверкой и выдачей ошибки в случае чего?

да, это называется "инкапсуляция". Паста:

=============

Суть инкапсуляции в том, что класс скрывает (инкапслирует) в себе логику работы с данными и сами данные, а наружу выставляет только методы. Пользователю этих методов не важно, как класс устроен внутри, как он хранит данные, какие у него есть поля, ему достаточно вызвать нужный метод чтобы получить результат.

Кроме нескольких публичных методов, остальные методы и свойства закрываются от доступа снаружи модификаторами private или protected. То есть с объектом снаружи ничего нельзя сделать, кроме вызова публичных методов.

Это упрощает понимание кода: тебе не надо читать и разбирать код класса, достаточно прочитать название публичных методов (и может быть комментарии к ним). Также, это упрощает изменение кода: если какое-то свойство имеет уровень private, то доступ к нему возможен только из того же класса и тебе не надо бегать по всему коду и смотреть что там с этим свойством делается, тебе достаточно просмотреть один файл с этим классом.

При инкапсуляции автор класса таким образом задает ограничения, что можно делать с объектом.

Как плюс, мы можем поставить какие-то проверки в методах, и запретить установку неправильных значений свойств. Таким образом, снаружи записать неправильное значение в объект будет нельзя и автор класса может гарантировать его корректную работу в любой ситуации. Если у нас есть публичные свойства, то в них можно записывать что угодно, а приватные свойства изменять снаружи нельзя, можно только вызвать методы, которые что-то делают.

Инкапсуляция это хорошо. Так как весь код, который занимается одной задачей, оказывается заключен внутри одного класса. Противоположный случай это когда код (или знание о его внутреннем устройстве) вылезает из класса и размазывается по всей программе.

Если проводить аналогии, то можно представить кофе-машину. Ты нажимаешь кнопку (=вызываешь публичный метод) и получаешь кофе (=результат вызова этого метода), при этом ты не видишь что происходит внутри нее и тебе не надо в этом разбираться.

Вот пример класса с использованием инкапсуляции:

// Объект представляет собой ломаную линию из нескольких сегментов
// Показаны только публичные методы, остальное скрыто
class PolyLine
{
public function __construct(float $x, float $y) { ... }

// Добавляет еще одну точку к ломаной
public function addPoint(float $x, float $y): void { ... }

// Посчитать общую длину линии
public function calculateLength(): float { ... }
...
}

В нем всего 3 публичных метода, включая конструктор, и мы видим, что с объектом можно сделать только три действия:

- создать ломаную, указав начальную точку
- добавить к ломаной еще одну точку
- посчитать длину ломаной

Вот пример использования этого класса:

$line = new PolyLine(1, 1);
$line->addPoint(2, 2);
$line->addPoint(4, 7);
echo $line->calculateLength();

При этом код может проверять передаваемые значения, например, не разрешать 2 раза добавлять одну и ту же точку. Здесь не приведен код методов и мы не видим приватные поля и методы, но нам это и не требуется - и так понятно, как использовать класс.

==================

> Неужели для каждого рабочего свой обьект создавать?

Это будет проще. Но ты можешь использовать и свой подход. Если у тебя реализована инкапсуляция, то по идее, коду снаружи неважно, как именно данные хранятся внутри - он вызывает метод, а дальше уже не его забота.

> Не совсем понял. Обьявить в начале кода 4 константые Manager,Engineer и т.д?

Они уже встроены в каждый класс, их объявлять не надо, можно сразу использовать: Manager::class. Прочти мануал https://www.php.net/manual/ru/language.oop5.constants.php

> Т.е базовая ставка у всех одинаковая, а итоговая зависит от ранга и является ли работник лидером?

Это 2 разные вещи. С одной стороны, если мы меняем ранг, то базовая ставка не меняется, а зарплата меняется. С другой стороны, мы можем повысить человеку базовую ставку и зарплата тоже поменяется.