PHPackages                             karelwintersky/arris.entity.path - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. karelwintersky/arris.entity.path

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

karelwintersky/arris.entity.path
================================

Arris µFramework: Path builder

1.0.0(1mo ago)03↓100%MITPHPPHP ^8.2

Since Mar 23Pushed 1mo agoCompare

[ Source](https://github.com/ArrisFramework/Arris.Entity.Path)[ Packagist](https://packagist.org/packages/karelwintersky/arris.entity.path)[ RSS](/packages/karelwintersky-arrisentitypath/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (1)Versions (3)Used By (0)

Arris\\Entity\\Path
===================

[](#arrisentitypath)

Утилитарный класс для построения и манипуляции файловыми путями. Поддерживает как обычные пути файловой системы, так и URL-схемы (`https://`, `ftp://` и т.д.).

---

Установка
---------

[](#установка)

Класс входит в состав пакета `arris/entity`. Подключается через автозагрузчик Composer:

```
use Arris\Entity\Path;
```

---

Быстрый старт
-------------

[](#быстрый-старт)

```
// Создать путь из строки
$path = new Path('/var/www/html');
echo $path; // /var/www/html

// Создать через фабричный метод
$path = Path::create('uploads/images');
echo $path->toString(); // uploads/images

// Соединить с подпутём
$full = Path::create('/var/www')->join('html/index.php');
echo $full; // /var/www/html/index.php

// URL-адрес тоже работает
$url = new Path('https://cdn.example.com/assets/app.js');
echo $url; // https://cdn.example.com/assets/app.js
```

---

Создание экземпляра
-------------------

[](#создание-экземпляра)

### Конструктор

[](#конструктор)

```
new Path(string|array|Path $path, ?bool $isAbsolutePath = null, ?bool $hasTrailingSeparator = null)
```

Принимает путь в одном из трёх форматов:

```
// Строка
$p = new Path('/foo/bar/baz');

// Массив сегментов
$p = new Path(['foo', 'bar', 'baz']);

// Другой экземпляр Path
$copy = new Path($existingPath);
```

**Автоопределение флагов из строки:**

Входная строка`isAbsolutePath``hasTrailingSeparator``/foo/bar``true``false``foo/bar/``false``true``/foo/bar/``true``true``foo/bar``false`/`null``false``` (пустая)`true``null`Множественные слэши автоматически схлопываются: `foo//bar///baz` → `foo/bar/baz`.

### Фабричный метод `create()`

[](#фабричный-метод-create)

```
Path::create(string|array|Path $path, ?bool $isAbsolutePath = null, ?bool $hasTrailingSeparator = null): Path
```

Эквивалентен конструктору, но удобнее для цепочек вызовов:

```
$path = Path::create('/var/www')
    ->setTrailingSeparator(true);
```

---

Методы
------

[](#методы)

### Получение строки

[](#получение-строки)

#### `toString(bool $hasTrailingSeparator = false): string`

[](#tostringbool-hastrailingseparator--false-string)

Экспортирует путь в строку. Аргумент позволяет принудительно добавить завершающий разделитель:

```
$p = new Path('/var/www/html');
$p->toString();       // /var/www/html
$p->toString(true);   // /var/www/html/
```

> **Внимание:** вызов `toString(true)` мутирует внутренний флаг `$hasTrailingSeparator`.

#### `__toString(): string`

[](#__tostring-string)

Псевдоним `toString()` без аргументов. Позволяет использовать объект в строковом контексте:

```
echo new Path('/etc/nginx'); // /etc/nginx
```

---

### Соединение путей

[](#соединение-путей)

#### `join(mixed $data): Path`

[](#joinmixed-data-path)

Возвращает **новый** экземпляр с добавленным сегментом. Наследует флаги `isAbsolutePath` и `hasTrailingSeparator` из текущего объекта.

```
$base = new Path('/var/www');
$full = $base->join('html');
echo $full; // /var/www/html

// Можно передать массив, строку или Path
$base->join(['assets', 'css']);  // /var/www/assets/css
$base->join(new Path('logs'));   // /var/www/logs
```

#### `joinName(mixed $data): Path`

[](#joinnamemixed-data-path)

Аналог `join()`, но принудительно устанавливает `hasTrailingSeparator = false`. Удобно для добавления имени файла:

```
$dir  = new Path('/var/www/');
$file = $dir->joinName('index.php');
echo $file; // /var/www/index.php
```

---

### Установка флагов

[](#установка-флагов)

Все методы мутируют текущий объект и возвращают `$this` для цепочек вызовов.

#### `setAbsolutePath(bool $is_present = true): Path`

[](#setabsolutepathbool-is_present--true-path)

```
$path = new Path('foo/bar');
$path->setAbsolutePath(true);
echo $path; // /foo/bar
```

#### `setTrailingSeparator(bool $is_present = true): Path`

[](#settrailingseparatorbool-is_present--true-path)

```
$path = new Path('/var/www');
$path->setTrailingSeparator(true);
echo $path->toString(true); // /var/www/
```

#### `setOptions(array $options): Path`

[](#setoptionsarray-options-path)

Устанавливает сразу несколько флагов. Поддерживает ключи `isAbsolute` и `hasTrailingSeparator`:

```
$path->setOptions([
    'isAbsolute'           => true,
    'hasTrailingSeparator' => false,
]);
```

> Неизвестные ключи игнорируются. Значение `null` также игнорируется (ключ должен присутствовать с непустым значением).

---

### Проверка файловой системы

[](#проверка-файловой-системы)

#### `isPresent(): bool`

[](#ispresent-bool)

Возвращает `true`, если по данному пути существует **директория**.

```
if ((new Path('/var/log'))->isPresent()) { /* ... */ }
```

#### `isFile(): bool`

[](#isfile-bool)

Возвращает `true`, если путь указывает на существующий **читаемый файл**.

```
if ((new Path('/etc/hosts'))->isFile()) { /* ... */ }
```

#### `makePath(int $access_rights = 0777): bool`

[](#makepathint-access_rights--0777-bool)

Создаёт директорию рекурсивно (аналог `mkdir -p`). Возвращает `true` при успехе или если директория уже существует.

```
$created = (new Path('/tmp/app/cache'))->makePath(0755);
```

---

Внутренние свойства
-------------------

[](#внутренние-свойства)

СвойствоТипОписание`$atoms``array`Массив сегментов пути (`['var', 'www', 'html']`)`$isAbsolutePath``?bool`Путь начинается с `/``$hasTrailingSeparator``?bool`Путь заканчивается на `/`---

Поддержка URL
-------------

[](#поддержка-url)

Класс содержит внутренний механизм («костыль») для работы с URL-схемами: `://` при разборе заменяется на `:||`, а при экспорте возвращается обратно. Это позволяет использовать `Path` для сборки URL, хотя для полноценной работы с URL рекомендуется использовать специализированный класс.

```
$url = new Path('https://example.com/api/v1');
echo $url; // https://example.com/api/v1

// Двойной слэш в пути (не в схеме) схлопывается
$url = new Path('https://cdn.example.com/a//b');
echo $url; // https://cdn.example.com/a/b
```

---

Совместимость и требования
--------------------------

[](#совместимость-и-требования)

- PHP **8.2+**
- Реализует интерфейс `PathInterface`
- Разделитель сегментов: `DIRECTORY_SEPARATOR` (на Unix — `/`, на Windows — `\`)

---

Известные особенности поведения
-------------------------------

[](#известные-особенности-поведения)

- `toString(true)` **мутирует** объект — флаг `hasTrailingSeparator` изменяется внутри. Если нужно неизменяемое поведение, используйте `Path::create($this)->toString(true)`.
- Сегмент `.` (точка) превращается во внутренний пустой атом `''`. При экспорте двойной разделитель схлопывается — итоговая строка остаётся корректной.
- Пустой атом (`''`) в середине массива сегментов при проходе через `validateAtom` не добавляется в `$atoms`.

---

Лицензия
--------

[](#лицензия)

MIT

###  Health Score

41

—

FairBetter than 88% of packages

Maintenance98

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

46d ago

Major Versions

0.99.0 → 1.0.02026-03-24

### Community

Maintainers

![](https://www.gravatar.com/avatar/6d4a5bbb45fc701f595e17c74b94658126704ebc4eafb3fb1aa8bc613cdcbbbd?d=identicon)[KarelWintersky](/maintainers/KarelWintersky)

---

Top Contributors

[![KarelWintersky](https://avatars.githubusercontent.com/u/2164874?v=4)](https://github.com/KarelWintersky "KarelWintersky (1 commits)")

---

Tags

pathentity

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/karelwintersky-arrisentitypath/health.svg)

```
[![Health](https://phpackages.com/badges/karelwintersky-arrisentitypath/health.svg)](https://phpackages.com/packages/karelwintersky-arrisentitypath)
```

###  Alternatives

[league/uri-components

URI components manipulation library

31932.3M66](/packages/league-uri-components)[matthiasmullie/path-converter

Relative path converter

10229.6M7](/packages/matthiasmullie-path-converter)[sebastianfeldmann/camino

Path management the OO way

176.4M1](/packages/sebastianfeldmann-camino)[shapecode/hidden-entity-type-bundle

Hidden field for Symfony entities

28428.6k1](/packages/shapecode-hidden-entity-type-bundle)[smile/module-custom-entity

Smile - Custom Entity Module

36104.1k5](/packages/smile-module-custom-entity)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
