// Должен быть приватным
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);
Как быстро все умрет?
Хостинг не поможет?
Как сделать чтобы не украли скрипт?
Если существует ли возможность динамической смены имени класса?
Это решение для очень кривой архитектуры
разработчик не хочет использовать пространства имён ввиду того что проект насчитывает десятки тысяч классов.