«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2017/08/24 12:44:42  №1050039 1
Задача про Вектор. Доделал вторую часть про оптимизацию, смотрите, пинайте.
https://github.com/telepok/php-test/blob/master/oop4.php

Я правильно понимаю, что если элемент массива содержит объект, то после удаления этого элемента массива объект автоматически уничтожится? Иди там более сложный механизм, сборщик мусора и все такое? В офф.доке не нашел, но сильно не искал, признаюсь.

Получилось много методов вида getFoo и setFoo, может имеет смысл заменить на один метод Get и Set с параметрами? Как вообще правильно это делать?
Ответы: >>1050204 >>1056159
https://github.com/telepok/php-test/blob/master/oop4.php Аноним 2017/09/02 16:05:43  №1056159 2
>>1050039

> public function addDepartment($department)
Тут нужен тайп-хинт

> Получилось много методов вида getFoo и setFoo, может имеет смысл заменить на один метод Get и Set с параметрами?
Нет, не имеет, это только сохздаст путаницу. Есть в общем-то 2 варианта, как делать:

- публично доступные свойства
- приватные свойства + сеттеры/геттеры

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

> array_splice($this->employees, array_search($employee, $this->employees), 1);
Тут нет проверки, что сотрудник найден. array_search может вернуть false, и ты просто удалишь другого сотрудника.

> $employee->getiSBoss()
Было бы красивее конечно isBoss(). Но тогда придется свойство назвать boss.

Если объекта нет, обычно возвращают null, который традиционно обозначает отсутствие объекта.

> class Employee
> //Сотрудник владеет полной информацией о себе
Комментарий нужно писать надо словом class, а не под

> $this->isBoss = 1;
Вот тут как раз стоило использовать true/false.

> public function getCoffee()
> public function setCoffee($coffee)
Здесь не очень удачно названы функции, так как они задают и возвращают разные значения. Одна - базовое потребление кофе, другая - итоговое.

Профессии следовало бы обозначить константами (Employee::ROLE_MANAGER), если ты хочешь для них делать проверки в коде (например, проверка, является ли сотрудник менеджером). Так как "Менеджер" - это лишь представление профессии для вывода (оно нужно только при выводе данных и не нужно при расчетах). А у тебя есть сравнения вроде if ($profession == "Аналитик"). Использовать тут строки плохо, так как там легко опечататься или что-то перепутать, плюс неясно, какие вообще варианты профессий есть. Плюс при смене языка или написания придется лазать менять названия по всей программе, а не в одном месте. Константы с цифрами или латинскими идентификаторами лишены этих недостатков. Заодно, IDE умеет делать автодополнение при наборе константы.

$staffList можно было оформить в виде маленького класса, чтобы была возможность передавать его куда-то и где-то повторно использовать.

Антикризисные функции надо сделать в классе (или классах). У нас же задача на ООП.

В функциях optimize1, optimize2 есть много похожего кода. Часть этого кода можно вынести в отдельные методы, а не копипастить. Ну например, поиск работников по критериям - чем не метод? Или замена босса - почему не сделать метод для этого?

При этом важно, чтобы методы в Сотруднике, Компании или Департаменте относились к этим сущностям и могли пригодиться где-то еще, а не занимающиеся только антикризисными мерами. Метод заменитьБосса - ок, метод уволитьNпроцентовИнженеров - не ок.

> $selectedEmployees[$i]->setRank($selectedEmployees[$i]->getRank() + 1);
Слишком длинно и тяжело читается, нужно что-то вынести в переменную (например, employee).

Вместо очистки компании лучше было бы сделать метод для ее клонирования. Изучи оператор clone.
Ответы: >>1056190 >>1056246
Аноним 2017/09/02 17:27:35  №1056190 3
напомню, что в старом треде проверил задачи:

про https://github.com/pricklynut/testhub >>1053064
про https://github.com/telepok/php-test/blob/master/oop4.php >>1056159
вопрос, где можно посмотреть исходники функций сортировки >>1056189

>>1056163

Добавить несколько букв наверно? Вообще, она на изучение функции strtr, если ты ее знаешь, можно не делать.
Аноним 2017/09/02 18:54:52  №1056246 4
>>1049870

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

>>1049956

Насколько я знаю, на Андроиде можно не только читать учебники и писать код, но и запускать PHP, использовать mysql (локально, без интернета). Понадобятся такие вещи:

- редактор для кода
- клавиатура со спецсимволами, на обычной замучаешься переключаться
- интерпретатор php
- БД mysql (если ты хочешь использовать БД)
- веб-сервер, например, Апач или встроенный в PHP
- возможно, консоль для работы с командной строкой

Это все бывает как по отдельности, так и вместе (вместе обычно платно, соответственно придется все собирать по частям). Если искать в маркете - будь осторожен, много мусора с рекламой и прочим. В F-droid (куда подозрительные приложения не принимают), увы, пусто. Старайся искать приложения без рекламы, аналитики, лишних разрешений и с открытым кодом.

Что касается верстки, тут проблем быть не должно - правишь код, сохраняешь файл на карту (диск?) и открываешь в браузере через file://... или встроенным просмотрщиком.

У меня есть андроид-смартфон, я пока не пробовал настроить на нем все для кодинга. Надо будет как-нибудь потом попробовать.

В Google Play - я поискал, ищутся такие вещи:

1) https://play.google.com/store/apps/details?id=com.alfanla.android.pws&hl=en - тут вроде веб-сервер (lighttpd) + PHP/mysql , вроде бесплатно, но с рекламой.

2) Это не в Google Play, а отдельно. Можно установить Script Layer 4 Android - SL4A - https://ru.wikipedia.org/wiki/SL4A - по идее он предназначен для написания приложений используя скриптовые языки, но подойдет и для наших целей. К нему поставить PHP for Android: http://phpforandroid.net/doku.php - и если заработает, можно будет запускать PHP код и использовать встроенный в PHP веб-сервер (а если очень заморочиться, то можно даже писать андроид-приложения на PHP, но пожалуйста, не надо).

Может еще что-то есть, погугли. Поиск в Google Play вываливает кучу вариантов и устанешь каждый проверять.

Если постоянное использование интернета для тебя не проблема, можно арендовать виртуальный сервер (VPS), на него поставить все что нужно, заходить на него через ssh-клиент (я использовал ConnectBot, который есть в F-droid). Кстати, если в ConnectBot выбрать local, то он откроет локальную консоль в андроиде (андроид на ядре линукса и немного утилит для командной строки там есть).

>>1050584

тут проверил >>1056159