// Должен быть приватным
DependencyManager::$dependencies;
// Что это за хардкод?))
DependencyManager::__construct
// 1. Вы не проверяете аргументы, что будет, если я передам в $class
// например new \Exception()? А еще лучше строку "trololo"?
// 2. Нейминг - гуано, вы не проверяете зависимость, а возвращаете.
// 3. Если зависимость не найдена - будьте добры исключение.
DependencyManager::checkDependencies($class)
// Эта переменная не нужна, передавайте ее в метод
Loader::$className
// Эта переменная должна быть приватная, что будет, если туда вставить
// например строку и попытаться обработать?
Loader::$dependencyManager;
// Херня. У вас метод делает какую-то магию.
Loader::loadClass
Еще пришла идея в классы с зависимостями передавать в аргументах интерфейсы, а не объекты.
Если одни разработчик обновил библиотеки, другие должны как то об этом узнать, чтобы обновится у себя
Список библиотек и версии обновляются не очень часто, а при каждом релизе, приходится выкачивать одни и те же либы
В проекте могут быть заняты люди, которые не умеют (или не могут в данный момент) работать с консолью: верстальщики, технические писатели, ревьюер кода (безопасности), сюда же и вопрос оплаты специалиста, которые умеет всё
Нет возможности просто и быстро передать кому-то код, просто расшарив ссылку на гит
Вопрос в том, можно ли сохранять папку vendor в git
насколько это противоречит принятому стилю
какие могут быть проблемы с этим (сейчас самый жирный минус от такого подхода вижу в распухании репозитория) ?
Использует ли кто-нибудь такую практику в своих проектах ?
$db->insert(new \Exception(), []);
$db->insert("DELETE FROM user", []);
$db->insert("SELECT CURRENT_TIMESTAMP", []);
}catch(PDOException $e){
throw new Exception($e->getMessage());
unset($arr[$key + 1]);
<?php
declare(strict_types = 1);
class UserRepository
{
/** @var \PDO */
private $pdo;
/**
* @param PDO $pdo
*/
public function __construct(\PDO $pdo)
{
$this->pdo = $pdo;
}
/**
* @param string $login
* @param string $email
* @param string $password
* @return int
* @throws \InvalidArgumentException
* @throws \PDOException
*/
public function insert(string $login, string $email, string $password): int
{
if (empty($login)) {
throw new \InvalidArgumentException('Argument "$login" must be not empty');
} elseif (empty($email)) {
throw new \InvalidArgumentException('Argument "$email" must be not empty');
} elseif (empty($password)) {
throw new \InvalidArgumentException('Argument "$password" must be not empty');
}
$sql = '
INSERT INTO `user`(
`login`,
`email`,
`password`
) VALUES (
:login,
:email,
:password
)';
$this->pdo->prepare($sql)->execute(
[
':login' => $login,
':email' => $email,
':password' => $password
]
);
return (int) $this->pdo->lastInsertId();
}
}
Прошу подсказать, куда искать, что почитать, что бы в голове прояснилось как грамотно проектировать подобные проекты. Хотя бы какие ключевые слова присутствуют в описании данных процедур.
Не нравится, что в итоге заводится куча тегов, веток, может есть альтернативное решение для такой задачи?
Схема кажется немного избыточна nginx->nginx->php, в итоге на сервере дофигища разных процессов, особенно nginx.
ansible забирает из гита исходный код, грузит на сервер, в контейнеры исходники пробрасываются через volume.
Нормальный ли принцип CMS я сформулировал?
некоторые cms без лицензии могут работать только на денвере но не на живом хостинге.
У js есть jquery, а у php что?
Например, такая банальность, как валидация форм: у меня есть собственные наработки и я могу их использовать, но ведь они далеки от идеала.
/**
* @Route("/profile/{id}", name="getProfile")
* @Method({"GET"})
* @param Request $request
* @return JsonResponse
*/
public function getProfileAction(Request $request): JsonResponse
{
try {
$id = $request->attributes->get('id');
if (is_null($id)) {
return new JsonResponse("Param 'id' is required", JsonResponse::HTTP_BAD_REQUEST);
} elseif (!is_string($id)) {
return new JsonResponse("Param 'id' must be string", JsonResponse::HTTP_BAD_REQUEST);
} elseif (!ctype_digit($id)) {
return new JsonResponse("Param 'id' must be digit", JsonResponse::HTTP_BAD_REQUEST);
}
// Business logic here
return new JsonResponse();
} catch (\Throwable $exception) {
return new JsonResponse($exception->getMessage(), JsonResponse::HTTP_BAD_REQUEST);
}
}
try {
$id = $request->attributes->get('id');
Assert::assert($id, 'id')->notNull()->string()->digit();
} catch (\Throwable $exception) {
return new JsonResponse($exception->getMessage(), JsonResponse::HTTP_BAD_REQUEST);
}
try {
// Business logic here
return new JsonResponse();
} catch (\Throwable $exception) {
return new JsonResponse($exception->getMessage(), JsonResponse::HTTP_BAD_REQUEST);
}
Есть ли подобные отработанные решения в фреймворках, они дают что-то кроме "каркаса"?
И почему нет библиотек популярных для php?
preg_replace('/[^\d]/', '', $inputString);
Как быстро все умрет?
Хостинг не поможет?
Как сделать чтобы не украли скрипт?