try {
$this->initDBConnect();
} catch (\Exception $e) {
// Тут залогировали
$this->logger->error('Некоторое сообщение', [некоторые данные]);
// тут выкинули дальше
// или throw new MyAnyException,
// а не просто дальше выкидывать тоже самое
throw $e;
}
и отдает он очередью именно этому клиенту, если параллельно буду заходить на сайт с другого окна из режима инкогнито у него своя очередь и страницы будут открываться
нам же ничего не мешает подключить доктрину и прочие компоненты и перейти к enterprise
<?php
namespace App\DTO;
class PostDTO
{
/** @var string */
private $name;
/** @var string */
private $description;
/** @var string */
private $text;
public function __construct(string $name, string $description, string $text)
{
$this->name = $name;
$this->description = $description;
$this->text = $text;
}
public function getName()
{
return $this->name;
}
public function getDescription()
{
return $this->description;
}
public function getText()
{
return $this->text;
}
}
$query = $em->createQuery('SELECT NEW App\DTO\PostDTO(p.name, p.description, p.text) FROM App\Entity\Post p');
$users = $query->getResult(); // array of PostDTO
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();
}
$massive = "1H|\^&|||ttt|||||h|BATCH|P|1 P|1 O|1|5331|598^0012^1^^S1^SC|^^^133^1\^^^140^1|R||20190625132832||||N||||1|||||||20190625135509|||F R|1|^^^133/1/not|1.52|uIU/ml||N||F||admin|||E1 R|2|^^^140/1/not|4.99|pmol/l||N||F||admin|||E00 21 L|1|N 43";
// Ищем все числа из трех цифр, перед которыми стоит ^^^
// и результат записываем в matches
preg_match_all('~\^{3}(?P<target>\d{3})~', $massive, $matches);
// В массиве matches c индексом 'target' лежат наши значения
// [
// 0 => "133"
// 1 => "140"
// 2 => "133"
// 3 => "140"
// ]
var_dump($matches['target']);
getMobileOpinionList()
getDefaultOpinionList()
try {
echo
(new PurchaseOrder(
new LocalOrderStorage(
new NullOrderStorage()
),
new OrderId($inputParams['order_id'])
))
->newInvoice(
new InvoiceNumber(
new Vendor(
new LocalVendorStorage(),
new VendorId($inputParams['vendor_id'])
),
new VendorInvoiceNumber($inputParams['vendor_invoice_number']),
new DateTime($inputParams['date_time'])
),
new VendorInvoiceNumber($inputParams['vendor_invoice_number']),
new DateTime($inputParams['date_time']),
new InvoiceAmount(
new Amount($inputParams['amount']),
new Currency($inputParams['currency'])
)
)
->json()
;
} catch (Exception $exception) {
return
(new ErrorResult())
->json($exception->getCode(), $exception->getMessage())
;
}
$badUrl = "example.com";
$resultArray = array_filter($startArray, function($arr) use ($badUrl) {
return !(isset($arr['url']) && $arr['url'] === $excludeUrl);
});
$badUrl = "example.com";
$resultArray = array_filter(
$startArray,
fn($arr) => !(isset($arr['url']) && $arr['url'] === $excludeUrl)
);