Build Status Coverage Status

Consistent object representation of data types.

Contains a number of traits that provide interface implementation and other functionality. These traits can be included in any class that require supported functionality.

Also provides ready-made wrapper classes for array, object, string, float, int and bool, plus Queue and Stack collections. Inheritance friendly implementation.

Installation

Install with Composer;

composer require phrity/o

Content by source type

Factory

The factory class converts scalars, arrays and objects into corresponding "O" instance.

$factory = new Factory();
$instance = $factory->convert([1, 2, 3]); // -> Arr instance

Classes

The following ready-made classes are available.

Class Source Implements
Arr array ArrayAccess Comparable Countable Equalable Iterator JsonSerializable Stringable Traversable
Boolean bool Comparable Equalable Stringable
Integer int Comparable Equalable Stringable
Number float Comparable Equalable Stringable
Obj object Comparable Equalable IteratorAggregate JsonSerializable Stringable Traversable
Stack array Comparable Countable Equalable IteratorAggregate Stringable Traversable
Str string Comparable Equalable Stringable
Queue array Comparable Countable Equalable IteratorAggregate Stringable Traversable

Traits

Traits are defined by source type. The following traits are available.

Trait Provides By source type
ArrayAccessTrait ArrayAccess Array
CoercionTrait Array Boolean Integer Number Object String
ComparableTrait Comparable Equalable Array Boolean Integer Number Object String
CountableTrait Countable Array
InvokableTrait Boolean Integer Number String
IteratorAggregateTrait IteratorAggregate Traversable Array Object
IteratorTrait Iterator Traversable Array
JsonSerializableTrait JsonSerializable Array Object
PropertyAccessTrait Object
QueueIteratorTrait IteratorAggregate Traversable Array
QueueTrait Array
StackIteratorTrait IteratorAggregate Traversable Array
StackTrait Array
StringableTrait Stringable Array Boolean Integer Number Object String
TypeTrait Array Boolean Integer Number Object String

Examples

Brief examples of classes below.

Scalar types

$str = new Str('hello world');
$str(); // Getter
$str('world'); // Setter

$int = new Integer(1234);
$int(); // Getter
$int(5678); // Setter

$num = new Number(12.34);
$num(); // Getter
$num(56.78); // Setter

$bool = new Boolean(true);
$bool(); // Getter
$bool(false); // Setter

Complex types

$array = new Arr([1, 2, 3]);
$array[] = 7; // ArrayAccess support
count($array); // Countable support
foreach ($array as $key => $value) {} // Iterator support
$array->equals(new Arr([2, 3, 4])); // Comparison support

$object = new Obj(['a' => 1, 'b' => 2, 'c' => 3]);
$object->b = 5; // Property access
$object->equals(new Obj(['c' => 1, 'd' => 2])); // Comparison support

Collection types

$queue = new Queue([1, 2, 3]);
$queue->enqueue(4);
$queue->dequeue();
count($queue); // Countable support
foreach ($queue as $key => $item) {} // Consuming iterator support
$queue->equals(new Queue([2, 3, 4])); // Comparison support

$stack = new Stack([1, 2, 3]);
$stack->push(4);
$stack->pop();
count($stack); // Countable support
foreach ($stack as $key => $item) {} // Consuming iterator support
$stack->equals(new Stack([2, 3, 4])); // Comparison support

Versions

Version PHP
2.1 ^8.0 JsonSerializable, improved ArrayAccess and PropertyAccess
2.0 ^8.0 Implementation as Traits
1.5 ^8.0 Fix for PHP 8.x versions
1.4 ^7.1|^8.0
1.3 ^7.1 Queue and Stack collection classes
1.2 ^7.1 Str (string), Number (float), Integer (int) and Boolean (bool) classes
1.1 >=5.6 Comparison support
1.0 >=5.6 Arr (array) and Obj (object) classes