<?php
$goods = [
'ASUS TUF' => ['Игровые ноутбуки', 'Ноутбуки для работы'],
'ARDOR GAMING NEO' => ['Игровые ноутбуки', 'Ноутбуки для работы'],
'MSI Katana' => ['Игровые ноутбуки', 'Ноутбуки для работы'],
'HUAWEI MateBook D 16 2024 MCLF-X' => ['Ноутбуки для работы', 'Ультрабуки'],
'Samsung Book3 Pro 360 NP960' => ['Ноутбуки для работы', 'Ультрабуки', 'Ноутбуки-трансформеры']
];
echo "<ul>";
foreach ($goods as $name => $categories) {
echo "<li>$name: " . implode(", ", $categories) . "</li>";
}
echo "</ul>";
?>
$del = $arr[1]['one'];
$del
записался байт ASCII-сивола "1", условно говоря. unset($arr[1]['one'])
$arr = [ 1 => [
'one' => '111',
'two' => '222',
], ];
$del = & $arr[1]; // ссылка на массив
unset($del['one']); // удаление ключа из массива по ссылке
print_r($arr); // результат Array ( [1] => Array ( [two] => 222 ) )
$del
с элементом исходного массива. А массив останется без изменений. $del = & $arr[1]['one']; // ссылка на элемент, который хочется удалить
unset($del); // не сработает. Просто разорвёт ссылку $del на элемент
Ведь соединений может быть как 2 так и 1_000_000+, что уже будет плохо и перебор всех элементов такой Map на каждом создание сообщения будет не очень хорошо сказываться, а так же, в примере это групповой канал, который может содержать так же от до 2 до бесконечного числа пользователей.
:root {
--main-color: blue;
}
html[lang="en"]
{
--main-color: red;
}
html[lang="ru"]
{
--main-color: green;
}
h1 {
color: var(--main-color);
}
SELECT *, WEIGHT() as relevance
FROM my_index
WHERE MATCH('^"точный запрос"$ | запрос')
ORDER BY relevance DESC;
SELECT *
FROM my_index
WHERE MATCH('запрос')
ORDER BY FIELD(my_column, 'точный запрос') DESC, relevance DESC;
DROP FUNCTION IF EXISTS YourFunction;
DELIMITER $$
CREATE FUNCTION YourFunction (qty INT, orderid INT) RETURNS TEXT
BEGIN
DECLARE text_t TEXT;
SELECT `sum` INTO text_t FROM t_order_price_type WHERE `orderid` = orderid LIMIT 1;
RETURN text_t;
END$$
DELIMITER ;
DROP FUNCTION IF EXISTS YourFunction;
DELIMITER $$
CREATE FUNCTION YourFunction (p_qty INT, p_orderid INT) RETURNS TEXT
BEGIN
DECLARE text_t TEXT;
SELECT `sum` INTO text_t FROM t_order_price_type WHERE `orderid` = p_orderid LIMIT 1;
RETURN text_t;
END$$
DELIMITER ;
animation: rotate 8s easy-in infinite;
animation: rotate 8s ease-in infinite;
package db
import "fmt"
// Стуктура базы данных. Здесь нам даже и не нужно объявлять никаких интерфейсов
type Service struct {
// ...
}
func NewDbService() (*Service, error) {
return &Service{}, nil
}
func (d *Service) CreateUser(username string, email string) {
fmt.Println(fmt.Sprintf("user %s with email %s is created", username, email))
}
func (d *Service) CreateProduct(name string) {
fmt.Println(fmt.Sprintf("product %s is created", name))
}
package user
// Тот самый интерфейс, который нам позволяет выбрать из структуры базы данных
// только нужные нам здесь методы
type dbUser interface {
CreateUser(username string, email string)
}
type Service struct {
db dbUser
// ...
}
func NewService(db dbUser) (*Service, error) {
return &Service{db}, nil
}
func (c *Service) New(username string, email string) {
c.db.CreateUser(username, email)
}
package product
// Тот самый интерфейс, который нам позволяет выбрать из структуры базы данных
// только нужные нам здесь методы
type dbProduct interface {
CreateProduct(name string)
}
type Service struct {
db dbProduct
// ...
}
func NewService(db dbProduct) (*Service, error) {
return &Service{db}, nil
}
func (p *Service) New(name string) {
p.db.CreateProduct(name)
}
package main
import (
"test2/db"
"test2/product"
"test2/user"
)
func main() {
// Инициализируем базу данных
dbService, _ := db.NewDbService()
// Структура базы данных реализует интерфейс dbProduct, инжектим её
productService, _ := product.NewService(dbService)
// Структура базы данных реализует интерфейс dbUser, инжектим её
userService, _ := user.NewService(dbService)
// Пользуемся на здоровье...
userService.New("user1", "uswr1@example.com")
productService.New("product1")
}
package models
type Product struct {
ID int `json:"id"`
Title string `json:"title"` //Название
Price int `json:"price"` //Цена
}
type ProductGetter interface {
GetAll() ([]Product, error)
GetByID(id int) (Product, error)
}
type ProductCreator interface {
Create(product Product) (Product, error)
}
type ProductUpdater interface {
Update(product Product) (Product, error)
}
type ProductDeleter interface {
Delete(id int) error
}
type ProductRepository interface {
ProductGetter
ProductCreator
ProductUpdater
}
По мнению некоторых участников дискуссии подключений не может быть более 65536Насколько я помню - всего TCP-портов 65536 (порт 0 зарезервирован), а максимальное количество соединений на один порт, не припоминаю, что бы чем-то ограничивалось (ну кроме ресурсов машины). Вы же понимаете, как в общей сложности всё это работает? Сервер хранит где-то в недрах памяти информацию по каждому соединению, при этом Вы можете подключаться многократно на один и тот же порт, с одного и того же IP к тому же самому серверу...
По состоянию на середину 2010-х годов серверный аппаратный узел среднего уровня способен обрабатывать до 10 млн соединений, т.е. 2010-й год, 10млн. соединений, одновременно. Думаю, этой цифры более чем достаточно практически для любого современного и даже очень нагруженного проекта, к тому же, как Вы могли заметить, про ограничения протокола TCP/IP, даже гипотетические - ничего не сказано.