Download the PHP package flancer32/php_data_object without Composer
On this page you can find all versions of the php package flancer32/php_data_object. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download flancer32/php_data_object
More information about flancer32/php_data_object
Files in flancer32/php_data_object
Package php_data_object
Short Description Simplified Data Container (inspired by Varien_Object).
License MIT
Homepage https://github.com/flancer32/php_data_object
Informations about the package php_data_object
php_data_object
"Smart data structures and dumb code works a lot better than the other way around." (c) Eric S. Raymond
"Bad programmers worry about the code. Good programmers worry about data structures and their relationships." (c) Linus Torvalds
Overview
This is yet another PHP implementation of the data container (like DTO / SDO). Some kind of the wrapper around associative array. The main goal of this implementation is to be an accessor for the raw data.
Native PHP objects
Structure
We can use any property of any PHP object:
$obj1 = new class {};
$obj2 = new class {};
$obj1->name = 'first';
$obj2->code = 'OBJ2';
$obj1->sub = $obj2;
$this->assertEquals('first', $obj1->name);
$this->assertEquals('OBJ2', $obj1->sub->code);
More...
Paths
We can set/get value of the inner property in PHP style:
$obj->sub->code = $code;
$code = $obj->sub->code;
but we will have "Undefined property" error if $obj->sub
property does not exist.
Type checking
We need to use accessors to control properties types.
This is Customer
class with string
property:
/**
* @property string $name Customer name.
*/
class Customer
{
public function getName() : string
{
return $this->name;
}
public function setName(string $data)
{
$this->name = $data;
}
}
This is Order
class with Customer
property:
/**
* @property Customer $customer
*/
class Order
{
public function getCustomer() : Customer
{
return $this->customer;
}
public function setCustomer(Customer $data)
{
$this->customer = $data;
}
}
This is code without errors (all types are expected):
$customer = new Customer();
$customer->setName('John Dow');
$order = new Order();
$order->setCustomer($customer);
$this->assertTrue(is_string($order->getCustomer()->getName()));
This code will throw a \TypeError
exception:
$customer = new class {};
$customer->name = 'John Dow';
$order = new Order();
$order->setCustomer($customer);
More...
Data Objects
Structure
Paths
With paths we will have property value if chain of properties exists or null
otherwise:
$code = $obj->get('sub/code');
$code = $obj->get('/sub/code'); // equals to 'sub/code'
$code = $obj->get('/subs/0/code'); // 'subs' is array
$code = $obj->get('/sub/code/does/not/exist'); // 'null' is returned, no error is occured
Also we can set data property by path:
$obj->set('order/customer/name', 'John Dow');
Type hinting
Installation
Add to composer.json
:
"require": {
"flancer32/php_data_object": "0.1.0"
}
Development
$ composer install
$ ./vendor/bin/phpunit -c ./test/unit/phpunit.dist.xml