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
- Array classes and traits
- Boolean class and traits
- Integer class and traits
- Number class and traits
- Object class and traits
- String class and traits
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 |