/** @return MemberEntity[] */
public function getMembers() {}
Если статус не является одним из них - выбрасываем исключение. Так же было бы удобно в самом статусе создавать объект через методы фабрики: Status::active(), Status::publish().
$data = [
'вес' => '',
'дата' => '',
'телефон' => '',
'город' => '',
'товар' => '',
'суммазаказа' => '',
'остаток' => '',
'статусзаказа' => '',
'ок' => '',
'предоплата' => '',
'доставка' => '24',
'поставщик' => '',
'статусоплаты' => '',
'номерзаказа' => '6666',
'оплата' => '',
'ценазакупки' => '',
'прибыль' => '',
'артикул' => '',
'коментарии' => '',
'коментарийклиента' => '',
'датазаказатовара' => '',
'статусдоставки' => '',
'магазин' => '',
];
$filterKeys = ['доставка', 'номерзаказа'];
$result = array_filter($filterKeys, function($key) use ($data) {
return isset($data[$key]);
});
var_dump($result);
function myFunc(...$args) {
// вернем все аргументы, что пришли в функцию
return $args;
}
$arr = [1, 'Maks', new \DateTime(), null];
var_dump(myFunc(...$arr));
require_once 'classes.php';Перейти на Композер и неймспейсы
class smartPhoneProductОставить Product, а тип товара вынести в свойство товара
type
или в category
product_id, name, value
и таких быть может много у одного товара. Или иной способ работы, главное чтобы при добавлении сотен характеристик вам не пришлось бы сотнями файлов классы придумывать и всегда был один Product, ну или были др причины создавать детей, например простой товар и цифровой... getProduct()После исправления предыдущего шага данная штука product->getProduct() устранится, а сериализация должна быть в другом слое, товар не должен знать ничего про то, как отображать его, тк отображений может быть много (в каталоге, в письме, в отчетах, в корзине)
echo "\nСкидка: " .$discountOnProduct. "P";echo — вывод, бизнес-объект не должен ничего знать про вывод, ответ сервера и прочее, должен быть просто
return $this->description()
Symfony includes the following normalizers:
...
PropertyNormalizer to normalize PHP object using PHP reflection.
получили по API ответ от некоего сервиса, содержащий поля и их значения некоего объекта "Документ", и после на основании некоего конфига мы создаем новый инстанс класса Document, с заполненными свойствами нужными нам значениями. Свойства приватные
Создавать через конструктор не вариант по своим причинам.
<?php
$json = <<<JSON
{
"issuance": {
"1": {
"data": "01.20",
"quantity": 2
},
"2": {
"data": "01.20",
"quantity": 4
},
"3": {
"data": "04.20",
"quantity": 2
},
"4": {
"data": "04.20",
"quantity": 2
}
}
}
JSON
;
$arr = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
$res = new \stdClass();
$res->issuance = array_values(
array_reduce(
$arr['issuance'],
function ($res, $el) {
$res[$el['data']]['data'] = $el['data'];
$res[$el['data']]['quantity'] = isset($res[$el['data']]['quantity'])
? $res[$el['data']]['quantity'] + $el['quantity']
: $el['quantity'];
return $res;
},
[]
)
);
var_dump(json_encode($res, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT, 512));
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