Skip to content

Commit a6c846b

Browse files
Реализация класса
0 parents  commit a6c846b

File tree

6 files changed

+236
-0
lines changed

6 files changed

+236
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/vendor/

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2021 Maxim N Epikhin
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# php-headers
2+
3+
Компонент для работы с пользовательскими константами в PHP. Данный компонент помогает
4+
оперировать константами и их представлениями.
5+
6+
Например, в базу данных (БД) производится запись чего-го либо на английском языке. В то же
7+
время, пользователю отражается эта информация уже на русском языке.
8+
9+
Данный класс предназначен для статической информации, которую нет смысла хранить в БД
10+
(как описано в примере выше).
11+
12+
В пользовательских классах необходимо завести константы:
13+
14+
```php
15+
CONST JUNIOR = 'junior';
16+
CONST MIDDLE = 'middle';
17+
CONST SENIOR = 'senior';
18+
```
19+
20+
Далее составляется карта соответствия:
21+
22+
```php
23+
protected static array $map = [
24+
self::JUNIOR => 'Начинающий',
25+
self::MIDDLE => 'Продвинутый',
26+
self::SENIOR => 'Эксперт',
27+
];
28+
```
29+
30+
Таким образом, можно обратиться как к самим константам класса (например, для сравнения),
31+
так и к методам класса для получения информации о них.
32+
33+
# Структура
34+
35+
```
36+
src/
37+
--- interfaces/
38+
--- Entity.php
39+
```
40+
41+
В директории `interfaces` хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации
42+
собственного класса `Entity`.
43+
44+
Класс `Entity` реализует интерфейс `EntityInterface` для управления пользовательскими константами.
45+
46+
# Доступные методы
47+
48+
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
49+
|-------------------------------|-----------|---------------------|--------------------------|------------------------------------------------------|
50+
| has(string $key) | Ключ | bool | | Проверяет наличие ключа в списке |
51+
| getMap(string $key = '') | Ключ | array | InvalidArgumentException | Возвращает список или массив [key => value] по ключу |
52+
| getMapValueByKey(string $key) | Ключ | mixed | InvalidArgumentException | Возвращает значение из списка по ключу |
53+
| getConstants() | | array | | Возвращает список всех констант класса |
54+
55+
# Контакты
56+
57+
Вы можете связаться со мной в социальной сети ВКонтакте: [ВКонтакте: Максим Епихин](https://vk.com/maximepihin)
58+
59+
Если удобно писать на почту, то можете воспользоваться этим адресом: mepihindeveloper@gmail.com
60+
61+
Мой канал на YouTube, который посвящен разработке веб и игровых проектов: [YouTube: Максим Епихин](https://www.youtube.com/channel/UCKusRcoHUy6T4sei-rVzCqQ)
62+
63+
Поддержать меня можно переводом на Яндекс.Деньги: [Денежный перевод](https://yoomoney.ru/to/410012382226565)

composer.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "mepihindeveloper/php-data-entities",
3+
"description": "Component for working with constant control mechanisms",
4+
"type": "library",
5+
"license": "MIT",
6+
"keywords": [
7+
"component",
8+
"class",
9+
"php",
10+
"entities"
11+
],
12+
"authors": [
13+
{
14+
"name": "mepihindeveloper",
15+
"email": "mepihindeveloper@gmail.com"
16+
}
17+
],
18+
"require": {
19+
"php": ">=7.4"
20+
},
21+
"autoload": {
22+
"psr-4": {
23+
"mepihindeveloper\\components\\": "src/"
24+
}
25+
},
26+
"minimum-stability": "dev",
27+
"prefer-stable": true
28+
}

interfaces/EntityInterface.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
namespace mepihindeveloper\components\interfaces;
6+
7+
use InvalidArgumentException;
8+
9+
/**
10+
* Интерфейс EntityInterface
11+
*
12+
* Декларирует методы обязательные для реализации компонента Entity
13+
*/
14+
interface EntityInterface {
15+
16+
/**
17+
* Проверяет наличие ключа в списке
18+
*
19+
* @param string $key Ключ
20+
*
21+
* @return bool
22+
*/
23+
public static function has(string $key): bool;
24+
25+
/**
26+
* Возвращает список или массив [key => value] по ключу
27+
*
28+
* @param string $key Ключ
29+
*
30+
* @return array
31+
*
32+
* @throws InvalidArgumentException
33+
*/
34+
public static function getMap(string $key = ''): array;
35+
36+
/**
37+
* Возвращает значение из списка по ключу
38+
*
39+
* @param string $key Ключ
40+
*
41+
* @return mixed
42+
*
43+
* @throws InvalidArgumentException
44+
*/
45+
public static function getMapValueByKey(string $key);
46+
47+
/**
48+
* Возвращает список всех констант класса
49+
*
50+
* @return array
51+
*/
52+
public static function getConstants(): array;
53+
}

src/Entity.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
namespace mepihindeveloper\components;
6+
7+
use InvalidArgumentException;
8+
use mepihindeveloper\components\interfaces\EntityInterface;
9+
use ReflectionClass;
10+
11+
/**
12+
* Класс Entity
13+
*
14+
* Реализует управление списком констант
15+
*/
16+
class Entity implements EntityInterface {
17+
18+
/**
19+
* @var array Список
20+
*/
21+
protected static array $map;
22+
23+
/**
24+
* @inheritDoc
25+
*/
26+
public static function getConstants(): array {
27+
$reflectionClass = new ReflectionClass(__CLASS__);
28+
29+
return $reflectionClass->getConstants();
30+
}
31+
32+
/**
33+
* @inheritDoc
34+
*/
35+
public static function getMapValueByKey(string $key)
36+
{
37+
if (!self::has($key))
38+
{
39+
throw new InvalidArgumentException("Ключ {$key} отсутствует.");
40+
}
41+
42+
return self::$map[$key];
43+
}
44+
45+
/**
46+
* @inheritDoc
47+
*/
48+
public static function getMap(string $key = ''): array
49+
{
50+
if (empty($key))
51+
{
52+
return self::$map;
53+
}
54+
55+
if (!self::has($key))
56+
{
57+
throw new InvalidArgumentException("Ключ {$key} отсутствует.");
58+
}
59+
60+
return [$key => self::$map[$key]];
61+
}
62+
63+
/**
64+
* @inheritDoc
65+
*/
66+
public static function has(string $key): bool
67+
{
68+
return array_key_exists($key, self::$map);
69+
}
70+
}

0 commit comments

Comments
 (0)