netherphp/object

Self-Sealing Stem Object

v4.1.15 2022-11-23 19:07 UTC

README

Packagist Build Status codecov

This package provides some utilities to aid with some low level work.

NOTE: ALL OF THIS LIBRARY HAS BEEN MERGED INTO Nether\Common and should no longer be used.

Class Overview

Nether\Object\Prototype

The Prototype Object is a self-sealing stem object capable of remapping schemas and ensuring that properties exist with default values if needed. Using this class as the parent enables the attribute based functionality all the way down.

Extending this class automatically grants a constructor designed to handle being given a pile of data, generally from something like a row of data from the database. It will look at what the class is expecting for the properties and make sure the data gets typecast prior to assignment to help avoid typing errors.

Simple Example:

class BaseObject
extends Nether\Object\Prototype {
	public int $ID;
	public string $Name;
}

$RowFromDB = [ 'ID'=> 1, 'Name'=> 'Bob' ];
$Obj = new BaseObject($RowFromDB);

Nether\Object\Datastore

Provides an array-like object so that items can be stored like arrays but manipulated with chainable methods. It implements Iterable, ArrayAccess, and Countable as well as having a bunch of methods for working on the data as a single collection.

Simple Example:

$Data = new Nether\Object\Datastore([
	1, 2, 3,
	4, 5, 6
]);

// strip out odd numbers
// then sort it big to small
// then show me what we got.

print_r(
	$Data
	->Filter(fn(int $Val)=> ($Val % 2) == 0)
	->Sort(fn(int $A, int $B)=> $B <=> $A)
	->Values()
);

// Array
// (
//    [0] => 6
//    [1] => 4
//    [2] => 2
// )

Trait Overview

Class/Method/Property Info Packages.

These traits when bolted onto any class provided static helper methods for reading all sorts of information about that class and its members, including the PHP 8 attributes, to aid in metaprogramming tasks. Classes which extend Prototype already have these applied.

Nether\Object\Package\ClassInfoPackage

Simple Example:

class MyClass {

	use
	Nether\Object\Package\ClassInfoPackage;

}

$ClassInfo = MyClass::GetClassInfo();

print_r($ClassInfo);
  • Documentation: uri-to-wikipage

Nether\Object\Package\MethodInfoPackage

Simple Example:

class MyClass {

	use
	Nether\Object\Package\MethodInfoPackage;

	public function
	GetID():
	int {

		return 0;
	}

}

$Methods = MyClass::GetMethodIndex();

foreach($Methods as $Method) {
	print_r($Method);
}
  • Documentation: uri-to-wikipage

Nether\Object\Package\PropertyInfoPackage

Simple Example:

class MyClass {

	use
	Nether\Object\Package\PropertyInfoPackage;

	public int
	$ID = 0;

}

$Props = MyClass::GetPropertyIndex();

foreach($Props as $Prop) {
	print_r($Prop);
}
  • Documentation: uri-to-wikipage