/** @Accessor(getter="getName") */
private $name;
public function getName()
{
return $this->name;
}
@serializer
сразу после установки компонента и можно просто заинжектить через SerializerInterface
в конструкторе We also provide CarbonImmutable class extending DateTimeImmutable. The same methods are available on both classes but when you use a modifier on a Carbon instance, it modifies and returns the same instance, when you use it on CarbonImmutable, it returns a new instances with the new value.
https://carbon.nesbot.com/docs/
носит чисто декоративный характер или как то помогает парсеру?
$element->attributes()
<?php
$string = <<<XML
<offer id="130" available="true" >
<url>http://api.loc/index.php?route=product/product&path=3899&product_id=130</url>
<price>850</price>
<currencyId>UAH</currencyId>
<categoryId>3899</categoryId>
<delivery>true</delivery>
<stock_quantity>100</stock_quantity>
<name>Босоножки 82BLUE р. 27 17,5 см Синий</name>
<vendor>(производитель не указан)</vendor>
<barcode>200</barcode>
<param name="Размер обуви">46</param>
<param name="Размер стельки">19</param>
</offer>
XML
;
$xml = new SimpleXMLElement($string);
$params = [];
// Все ноды с тегом param ушли в массив, каждый из из которых SimpleXMLElement
foreach($xml->param as $param) {
// а также @attributes, в котором все атрибуты текущего элемента, достаем тот, что name
$paramName = $param->attributes()['name'];
$params[(string) $paramName] = (string) $param;
}
var_dump($params);
// [
// "Размер обуви" => string(2) "46"
// "Размер стельки" => string(2) "19
// ]
$featuresMap = [
'Размер обуви' => 'size',
'Размер стельки' => 'stelka',
];
foreach($xml->param as $param) {
$paramName = $param->attributes()['name'];
$paramAlias = $featuresMap[(string) $paramName]
$params[$paramAlias] = (string) $param;
}
class Bar
{
/** @var ArrayCollection|Bar[] */
public ArrayCollection $props;
}
class ArrayCollection<T>
{
public getElement(): <T>;
public addElement(<T> $element): void;
}
class Bar
{
public ArrayCollection<Bar> $barCollection;
}
dd(get_class($event->getController()));
<?php
$jsonProducts = '[
{
"market_name": "T-shirts",
"size": "M"
},
{
"market_name": "T-shirts",
"size": "L"
},
{
"market_name": "Jacket",
"size": "M"
},
{
"market_name": "Jeans",
"size": "XL"
}
]';
$jsonPrice = '{
"data": [
{
"updated_at": 1576048969000,
"prices": {
"last": 5300
},
"name": "Jacket"
},
{
"updated_at": 1576048969000,
"prices": {
"last": 2000.12
},
"name": "T-shirts"
}
]
}';
$products = json_decode($jsonProducts, true);
$price = array_column(json_decode($jsonPrice, true)['data'], 'prices', 'name');
$result = array_map(function($item) use ($price) {
$product = new \stdClass();
$product->market_name = $item['market_name'];
$product->size = $item['size'];
$product->price = $price[$item['market_name']]['last'] ?? null;
return $product;
}, $products);
$result = json_encode($result, JSON_PRETTY_PRINT);
var_dump($result);
// [
// {
// "market_name": "T-shirts",
// "size": "M",
// "price": 2000.12
// },
// {
// "market_name": "T-shirts",
// "size": "L",
// "price": 2000.12
// },
// {
// "market_name": "Jacket",
// "size": "M",
// "price": 5300
// },
// {
// "market_name": "Jeans",
// "size": "XL",
// "price": null
// }
// ]
// регайте ваш интерфейс, но ссылаясь на метод фабрики,
// которая и произведет ваш сервис
\App\Writer\WriterInterface::class => DI\factory('\App\Writer\TextWriterFactory::create'),
class TextWriterFactory implements WriterFactoryInterface
{
public function __construct(Settings $settings, DataConverter $dataConverter)
{
$this->settings = $settings;
$this->dataConverter = $dataConverter;
}
public function create(string $filePath): WriterInterface
{
return new TextWriter($this->settings, $this->dataConverter, $filePath);
}
}
[$obj, 'myCallbackMethod']
[MyClass::class, 'myCallbackMethod']
'MyClass::myCallbackMethod'
<?php
class TestListener
{
// сигнатуру тут лишнюю для простоты примера просто убрал
public function onContentPrepare(&$row) {
$row->text = preg_replace_callback('|{gold}|', [$this, 'insertgold'], $row->text);
}
public function insertgold(array $matches)
{
return $matches[0] . 'Called';
}
}
// Example
$string = new stdClass();
$string->text = 'TestText with gold and gold ';
$listener = new TestListener();
$listener->onContentPrepare($string);
var_dump($string->text ); //TestText with goldCalled and goldCalled
какой смысл использовать Apachе или Nginx содержащий образ? Разве нельзя работать с контейнером содержащим только php?
Разве нельзя работать с контейнером содержащим только php?
FROM php:7.1-cli
FROM php:7.1-fpm
try {
$this->initDBConnect();
} catch (\Exception $e) {
// Тут залогировали
$this->logger->error('Некоторое сообщение', [некоторые данные]);
// тут выкинули дальше
// или throw new MyAnyException,
// а не просто дальше выкидывать тоже самое
throw $e;
}