Dataset

Ein Dataset ermöglicht es verschiedene Objekte zentral und in einer Hirarchie abzubilden. Im wesentlichen besteht ein Dataset aus Maps, Collections und Alvine-Objekten.

Allgemeine Definition

$dataset=(new \Alvine\Data\Dataset) 
    ->setValue('my', new \Alvine\Types\StringType('World'))
    ->setValue('user', (new \Alvine\Types\Collection())
    ->append((new \Alvine\Types\Map)->setValue('name', 'Hans')->setValue('plz', '12'))
    ->append((new \Alvine\Types\Map)->setValue('name', 'Franz')->setValue('plz', '34'))
    ->append((new \Alvine\Types\Map)->setValue('name', 'Thomas')->setValue('plz', '56'))
    ->append((new \Alvine\Types\Map)->setValue('name', 'Alexander')->setValue('plz', '78')));

// Json erstellen        
echo \json_encode($dataset);

Je nach Typ des Objektes wird das Ergebnis unterschieldich sein. In diesem Beispiel erhält man folgende Zeichenkette:

{"my":"World","user":[{"name":"Hans","plz":"12"},{"name":"Franz","plz":"34"},{"name":"Thomas","plz":"56"},{"name":"Alexander","plz":"78"}]}

Json Ausgabe

Wird keine Map verwendet, so werden nacheinander verschiedene Methoden zur Wertbestimmung probiert. Zuerst wird geprüft ob das Objekt das Interface \JsonSerializable implementiert. Ist dies der Fall, so wird das Ergebnis verwendet. Im weiteren wird noch auf

  • toArray(),
  • asJson() und
  • __toString()

  • in dieser Reihenfolge - geprüft. Ist keine der Methoden vorhanden, so werden alle öffentlichen Eigenschaften genommen. Wird keine dieser Optionen gefunden, so wird null verwendet.

Im folgenden Beispiel sind einige Varianten zusammengestellt

/** Objekt ohne Methoden und Daten */
class MyData {

}

/** Dataset */
$dataset=(new \Alvine\Data\Dataset)
    ->setValue('entry', new MyData());

/** JSON */
echo \json_encode($dataset);
// Ergibt -> {"entry":[]}

/** Objekt ohne Methoden und Daten */
class MyDataToString {

    public function __toString() {
        return 'value';
    }

}

/** Dataset */
$dataset=(new \Alvine\Data\Dataset)
    ->setValue('entry', new MyDataToString());

/** JSON */
echo \json_encode($dataset);
// Ergibt -> {"entry":"value"}

/** Objekt ohne Methoden und Daten */
class MyDataToArray {

    public function toArray() {
        return ['value'];
    }

}

/** Dataset */
$dataset=(new \Alvine\Data\Dataset)
    ->setValue('entry', new MyDataToArray());

/** JSON */
echo \json_encode($dataset);
// Ergibt -> {"entry":["value"]}

/** Objekt ohne Methoden und Daten */
class MyDataAsJson {

    public function asJson() {
        return \json_encode(['value']);
    }

}

/** Dataset */
$dataset=(new \Alvine\Data\Dataset)
    ->setValue('entry', new MyDataAsJson());

/** JSON */
echo \json_encode($dataset);
// Ergibt -> {"entry":["value"]}

/** Objekt ohne Methoden und Daten */
class MyDataProperties {

    public $myPublic='World';
    protected $myProtected='Privat';

}

/** Dataset */
$dataset=(new \Alvine\Data\Dataset)
    ->setValue('entry', new MyDataProperties());

/** JSON */
echo \json_encode($dataset);
// Ergibt -> {"entry":{"myPublic":"World"}}