Windwalker Data package

Installs: 2 890

Dependents: 3

Watchers: 1

Type: windwalker-package

2.1.4 2015-08-16 13:51 UTC


Installation via Composer

Add this to the require block in your composer.json.

    "require": {
        "windwalker/data": "~2.0"

Using Data Object

The constructor of Data can insert an array or object, it will convert to Data properties.

use Windwalker\Data\Data;

$array = array(
    'foo' => 'bar',
    'flower' => 'sakura'

$data = new Data($array);

echo $data->flower; // sakura

Binding object into it

$obj = new \stdClass;
$obj->goo = 'yoo';


echo $data->goo; // yoo

Get and Set property

Data object has magic method to be getter and setter of any property, we don't need to worry about the property exists or not. Non-exists property will return null.

echo $data->foo; // exists

echo $data->yoo; // Not exists, but no warning, it will return null.

We can also using getter and setter:

$data->set('flower', 'rose');

echo $data->get('flower');

Default Value

If some property not exists, we can get a default value.

echo $data->get('flower', 'Default value');

// OR

echo $data->flower ? : 'Default Value';

Array Access

Using array access to get property:

// Set
$data['flower'] = 'Sunflower';

// Get
echo $data['flower'];


Data object can directly use in foreach as iterator:

foreach ($data as $key => $value)
    echo $key . ' => ' . $value;

Null Data

In PHP, an empty object means not empty, so this code will return FALSE:

$data = new Data; // Data object with no properties

var_dump(empty($data)); // bool(false)

So we use isNull() method to detect whether object is empty or not, this is similar to Null Object pattern:

$data = new Data;

var_dump($data->isNull()); // bool(true)

Another simple way is convert it to array, this also work:

var_dump(empty((array) $data)); // bool(true)

Map and Walk

    return strtoupper($value);

$data->walk(function(&$value, $key, $userdata)
    $value = $userdata . ':' . $key . ':' . $value;
}, 'prefix');

Using DataSet Object

DataSet is a data collection bag for Data object. We can insert array with data in constructor.

use Windwalker\Data\Data;
use Windwalker\Data\DataSet;

$dataSet = new DataSet(
        new Data(array('id' => 3, 'title' => 'Dog')),
        new Data(array('id' => 4, 'title' => 'Cat')),

Array Access

Operate DataSet as an array, it use magic method to get and set data.

echo $dataSet[0]->title; // Dog

Push a new element:

$dataSet[] = new Data(array('id' => 6, 'title' => 'Lion'));


We can also using iterator to loop all elements:

foreach ($dataSet as $data)
    echo $data->title;

The Batch Getter & Setter

Get values of foo field from all data objects.

// will be an array of every Data's foo property
$value = $dataset->foo;

Set value to bar field of all object.

// will set 'Fly' to every Data's bar property
$dataset->bar = 'Fly';

Map and Walk

    $data->foo = 'bar';

    return $data;

$dataset->walk(function(&$data, $key, $userdata)
    $data->foo = $userdata . ':' . $key;
}, 'prefix');