<?php
$inp = <<<TEXT
/**
* Use the default user interface font in all browsers (opinionated).
*/
html {
font-family:
system-ui,
/* macOS 10.11-10.12 */ -apple-system,
/* Windows 6+ */ "Segoe UI",
/* Android 4+ */ "Roboto",
/* Ubuntu 10.10+ */ "Ubuntu",
/* Gnome 3+ */ "Cantarell",
/* KDE Plasma 5+ */ "Noto Sans",
/* fallback */ sans-serif,
/* macOS emoji */ "Apple Color Emoji",
/* Windows emoji */ "Segoe UI Emoji",
/* Windows emoji */ "Segoe UI Symbol",
/* Linux emoji */ "Noto Color Emoji";
}
TEXT;
$text = preg_replace('!/\*.*?\*/!s', '', $inp);
var_dump($text);
try {
// тут вызов кода, который может выбить исключение А
} catch (ExceptionA $e) {
// если A вылетело, то попадаем в отлове сюда
// дальнейший код, который может кидать исключения, надо обрабатывать отдельно,
// тк тут УЖЕ произошел отлов исключения из секции try, а новые вызовы надо по новой покрывать
}
class Bro {
public function __construct(
private string $name,
){}
public function changeBro(Bro $bro) {
$bro->name = 'я думал ты бро, а ты не бро';
}
}
$maks = new Bro('Макс');
$roma = new Bro('Рома');
$roma->changeBro($maks);
// теперь у Макса имя другое :)
this.http.get('../php/user.php')
this.http.get('/user.php')
__invoke()
метод позволяет превратить объект в функцию, которую мы можем передавать/получать/резовлить через псевдо-тип callable.public function add(callable $pipe) {
//..
}
...
$pipeline = (new Pipeline)
->add(fn() => true)
->add(fn(bool $enabled) =>'Maks enabled')
->add(new MaksHandler()) // тут класс с методом __invoke и работает как анонимка
;
$error = $this->handle($json);
if ($error === '') {
// логируем что все ок
} else {
// логируем ошибку
}
<?php
class Node{
private $arr = [];
public function getChildren($node)
{
if (!empty($node->data)){
array_push($this->arr, $node->data);
}
if (!empty($node->left)){
$this->getChildren($node->left);
}
if (!empty($node->right)){
$this->getChildren($node->right);
}
return $this->arr;
}
}
$node = createNode(
6 . '_base',
createNode(7 . '_right'),
createNode(8 . '_left',
createNode(81 . '_left'),
createNode(82 . '_right',
createNode(821 . '_right',
null,
createNode(824 . '_left')
)
)
)
);
function createNode($data, $right = null, $left = null) {
$obj = new stdClass();
$obj->data = $data;
$obj->right = $right;
$obj->left = $left;
return $obj;
}
var_dump((new Node)->getChildren($node));
// [
// "6_base"
// "8_left"
// "82_right"
// "821_right"
// "824_left"
// "81_left"
// "7_right"
// ]
symfony/config
symfony/cache
doctrine/annotations
а? Если нет и нужно все равно писать абсолютно всю логику в обьекте модели, то тогда он станет просто god обьектом на 100500 строчек
final class HandleCheckOutShoppingCart
{
public function __construct(Carts $carts, PaymentGateway $gateway)
{
$this->carts = $carts;
$this->gateway = $gateway;
}
public function __invoke(CheckOutShoppingCart $command) : void
{
$shoppingCart = $this->carts->get($command->shoppingCart());
$payment = $this->gateway->captureCharge($command->charge());
$shoppingCart->checkOut($payment);
}
}
Как такое может быть?
$em->clear()
Sometimes you want to clear the identity map of an EntityManager to start over. We use this regularly in our unit-tests to enforce loading objects from the database again instead of serving them from the identity map. You can call EntityManager#clear() to achieve this result.
https://www.doctrine-project.org/projects/doctrine...
Консьюмеру не хватате параметра какого - то?
$date->format('c');
где фичи для приложения выносятся в отдельные модули
как разбить приложение на переиспользуемые модули-фичи
$a() - $b()
<?php
class N {
private int $n;
public function __construct(int $n = 0) {
$this->n = $n;
}
public function __invoke(): int {
return $this->n;
}
}
$a = new N(5);
$b = fn() => 100;
var_dump($a() - $b()); // -95
<?php
class N {
private int $n;
public function __construct(int $n = 0) {
$this->n = $n;
}
public function __invoke(int $multiplier = 1): int {
return $multiplier * $this->n;
}
}
$a = new N(5);
$b = fn(int $multiplier = 1) => $multiplier * 100;
var_dump($a(100) - $b()); // 400
sandbox.onlinephpfunctions.com/code/331eef7f9ad530...<?php
interface NumericInterface {
public function add(Numeric $second): NumericInterface;
public function toInt(): int;
}
class Numeric implements NumericInterface {
private $n;
public function __construct($n = 0) {
$this->n = $n;
}
public function add(Numeric $second): self {
return new self($second->n + $this->n);
}
public function toInt(): int {
return $this->n;
}
}
$num1 = new Numeric(10);
$num2 = new Numeric(18);
$result = $num1->add($num2)->toInt();
var_dump($result); // 28
$curl->tick()
, чтобы он мог продолжить работу. wait() под капотом делает именно этоuse GuzzleHttp\Client;
use GuzzleHttp\Handler\CurlMultiHandler;
use GuzzleHttp\HandlerStack;
use Psr\Http\Message\ResponseInterface;
$curl = new CurlMultiHandler;
$handler = HandlerStack::create($curl);
$client = new Client(['handler' => $handler]);
$p = $client
->getAsync('http://google.com')
->then(
function (ResponseInterface $res) {
echo 'response: ' . $res->getStatusCode() . PHP_EOL;
},
function (\Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
);
while ($p->getState() === 'pending') {
$curl->tick();
// sleep(1);
}
echo 'bottom' . PHP_EOL;