type
в таблице клиента, нужно только соблюсти момент, чтобы id у физлица не пересекались с юрлицом, например используя uuid или любым другим способом создавать id, например через автоинкремент таблицы клиента.migrations_directory
migrations_directory: "<path>"
migrations_namespace: Application\Migrations
table_name: migration_versions
doctrine:migrations:migrate --configuration=<path_to_configuration_of_migration_yml>
class Container
{
private $callableServices;
public function add(string $serviceName, callable $service)
{
$this->callableServices[$serviceName] = $service;
}
public function get(string $serviceName)
{
$service = $this->callableServices[$serviceName];
return $service();
}
}
$container = new Container();
// объект тут не создается, тк он внутри функции, которая не вызывается
$container->add('a', function() {
return new FirstBigService();
});
// объект тут не создается, тк он внутри функции, которая не вызывается
$container->add('b', function() {
return new SecondBigService();
});
// Внутри метода get() идет не просто доставание нужного элемента,
// а еще и его вызов (тк лежат функции), то есть именно сейчас
// произойдет new FirstBigService()
$service = $container->get('a');
// тут левый код
...
// Код ниже работает изолировано и на него ничего не может подействоват,
// т.к. внутри свой контекст
(function() {
$app = new Application();
$app->run();
});
И в будущем удобно будет тестировать ?
$this->solutions
должно устанавливаться через конструктор, потому вам не составит труда заинжектить это состояние в тестируемый объект.protected function setPrivateProperty(object $object, string $propertyName, $value): void
{
$reflectionClass = new \ReflectionClass(get_class($object));
$property = $reflectionClass->getProperty($propertyName);
$property->setAccessible(true);
$property->setValue($object, $value);
$property->setAccessible(false);
}
class System
{
// Не важно, как оно будет заполнено, важно,
// что в методе мы проверяем некоторые значения
// и мы создадим ниже в тестах эти ситуации разными тест-кейсами
private $solutions;
public function checkRecords(): string
{
if (count($this->solutions) === 3) {
return 'full';
}
if (count($this->solutions) === 6) {
return 'overflow';
}
throw new IncorrectCountException('Incorrect solutions count.');
}
}
public function testCheckRecordsFull(): void
{
// 3 элемента
$data = [1, 2, 3];
$system = new System();
$this->setPrivateProperty($system, 'solutions', $data);
$status = $system->checkRecords();
$this->assertEquals('full', $status);
}
public function testCheckRecordsOverFlow(): void
{
// 6 элементов
$data = [1, 2, 3, 4, 5, 6];
$system = new System();
$this->setPrivateProperty($system, 'solutions', $data);
$status = $system->checkRecords();
$this->assertEquals('overflow', $status);
}
public function testCheckRecordsIncorrectCOunt(): void
{
// сколько-то элементов, но не 3 и не 6
$data = [1];
$system = new System();
$this->setPrivateProperty($system, 'solutions', $data);
$this->expectException(IncorrectCountException::class);
$system->checkRecords();
}
Ну как бы человек просто глупеет с возрастом. Мозг хуже работает информация хуже усваивается.
Его дело книжки писать бесполезные.
Наверно ушатаю. Его школьник олимпиданик ушатает 200% на им же созданном языке )
Зачем frontend девелоперу такой большой опыт?
я бы не отказался поработать пол годика с такой зп
interface SenderInterface
{
public function send(): void {};
}
class Order
{
// тут будет любой, но обязан реализовать SenderInterface
private $sender;
public function __constuctor(SenderInterface $sender) {
$this->sender = $sender;
}
public function save(): void
{
// какой в приватном поле сидит, тот и отправит,
// а кто -- текущему объекту все равно, это есть инверсия зависимости
// и принцип единственной ответственности, данный класс не отправляет, а поручает
$this->sender->send();
}
}
class MailSender implement SenderInterface
{
public function send(): void
{
// тут отправка почтой
}
}
class TelegramSender implement SenderInterface
{
public function send(): void
{
// тут отправка телегой
}
}
// Пример полиморфной работы Order
$order = new Order(new TelegramSender());
$order->save(); // тут отправка телеграмом
$order = new Order(new MailSender());
$order->save(); // тут отправка mail
$order->save()
, и вообще его код не трогатьЛично я считаю, что отказ со стороны работодателя изучить мне договор в течении хотя бы нескольких суток, можно считать
doctrine:
orm:
mappings:
UserEntities:
type: annotation
dir: "%kernel.root_dir%/../src/Models/User/Entity"
is_bundle: false
prefix: <YOUR_NAMESPACE>\Models\User\Entity