Secciones

Componente Registro


Resumen

Phalcon\Support\Registry is an object-oriented array. It extends Phalcon\Support\Collection but cannot be extended itself since all of its methods are declared final. Ofrece velocidad, así como implementaciones de varias interfaces PHP. Estas son:

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

Constructor

Puede construir el objeto como cualquier otro objeto en PHP. Sin embargo, el constructor acepta un parámetro opcional array, que rellenará el objeto por usted.

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

Reutilización

También puede reutilizar el componente, volviéndolo a rellenar. Phalcon\Support\Registry exposes the clear() and init() methods, which will clear and repopulate the internal array respectively,

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo $collection->count(); // 2

$data = [
    'year' => 1987,
];

$collection->clear();

$collection->init($data);

echo $collection->count(); // 1

Obtener

As mentioned above, Phalcon\Support\Registry implements several interfaces, in order to make the component as flexible as possible. Recuperar datos almacenados en un elemento se puede hacer usando:

  • Propiedad
  • __get()
  • Acceso como arreglo ($collection[$element])
  • offsetGet()
  • get()

La manera más rápida es usando la sintaxis de propiedad:

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo $collection->year; // 1987

Puede usar __get($element) pero no es recomendable ya que es mucho más lenta que la sintaxis de propiedad. Lo mismo se aplica a offsetGet

echo $collection->__get('year');           // 1987
echo $collection['year'];                  // 1987
echo $collection->offsetGet('year');       // 1987
echo $collection->get('year', 1987, true); // 1987
public function get(
    string $element, 
    mixed $defaultValue = null, 
    string $cast = null
):  mixed

Usar get() ofrece tres parámetros extra. Cuando se define $defaultValue en la llamada y el elemento no se encuentra, se devolverá $defaultValue. The cast parameter accepts a string that defines what the returned value will be cast. Los valores disponibles son:

  • array
  • bool
  • boolean
  • double
  • float
  • int
  • integer
  • null
  • object
  • string

Has

Para comprobar si un elemento existe o no en la colección, puede usar lo siguiente:

  • isset() en la propiedad
  • __isset()
  • isset basado en vector (isset($collection[$element]))
  • offsetExists()
  • has()

La manera más rápida es usando la sintaxis de propiedad:

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo isset($collection->year); // true

Puede usar __isset(element) pero no es recomendable porque es mucho más lento que la sintaxis de propiedad. Lo mismo se aplica a offsetExists

echo $collection->__isset('year');        // true
echo isset($collection['year']);          // true
echo $collection->offsetExists('year');   // true
echo $collection->has('year', true);      // true
public function has(string $element):  bool

Establecer

Para establecer un elemento en la colección, puede utilizar lo siguiente:

  • asignar el valor a la propiedad
  • __set()
  • asignación basado en vector
  • offsetSet()
  • set()

La manera más rápida es usando la sintaxis de propiedad:

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
];

$collection = new Registry($data);

$collection->year = 1987;

Puedes usar __set($element, $value) pero no es recomendable ya que es mucho más lento que la sintaxis de propiedades. Lo mismo se aplica a offsetSet

$collection->__set('year', 1987);
$collection['year'] = 1987;
$collection->offsetSet('year', 1987);
$collection->set('year', 1987); 

Eliminar

Para eliminar un elemento en la colección, puede utilizar lo siguiente:

  • desestablecer la propiedad
  • __unset()
  • desestablecer basado en vector
  • offsetUnset()
  • remove()

La manera más rápida es usando la sintaxis de propiedad:

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
];

$collection = new Registry($data);

unset($collection->year);

Puedes usar __unset($element) pero no es recomendable ya que es mucho más lento que la sintaxis de propiedades. Lo mismo se aplica a offsetUnset

$collection->__unset('year');
unset($collection['year']);
$collection->offsetUnset('year');
$collection->remove('year'); 
public function remove(string $element):  void

Iteración

Dado que el objeto de colección implementa \IteratorAggregate, puedes iterar con facilidad a través del objeto. El método getIterator() devuelve un objeto ArrayIterator()

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

foreach ($collection as $key => $value) {
    echo $key . ' - ' . $value . PHP_EOL;
}

Contar

La implementación de la interfaz \Countable expone el método count(), que almacena el número de elementos en la colección.

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo $collection->count(); // 2

Serialización

Las interfaces \Serializable y \JsonSerializable exponen métodos que le permiten serializar y deserializar un objeto. serialize() y unserialize() utilizan las funciones serialize y unserialize de PHP. jsonSerialize() devuelve un arreglo que puede ser usado con json_encode() para serializar el objeto.

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo $collection->serialize();    
// a:2:{s:6:"colors";a:3:{i:0;s:3:"red";
// i:1;s:5:"green";i:2;s:4:"blue";}s:4:"year";i:1987;}

$serialized = 'a:2:{s:6:"colors";a:3:{i:0;s:3:"red";'
    . 'i:1;s:5:"green";i:2;s:4:"blue";}s:4:"year";i:1987;}';
$collection->unserialize($serialized);

echo $collection->jsonSerialize(); // $data

Transformaciones

Phalcon\Support\Registry also exposes two transformation methods: toArray() and toJson(int $options). toArray() devuelve el objeto transformado como un arreglo. Este método devuelve el mismo array que jsonSerialize().

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo $collection->toArray(); // $data

toJson(int $options) devuelve una representación JSON del objeto. Utiliza json_encode() internamente y acepta un parámetro, que representa las banderas que json_encode acepta. By default, the options are set up with the value 79, (RFC4327) which translates to:

  • JSON_HEX_TAG
  • JSON_HEX_APOS
  • JSON_HEX_AMP
  • JSON_HEX_QUOT
  • JSON_UNESCAPED_SLASHES

Puede pasar cualquier bandera válida al método según sus necesidades.

<?php

use Phalcon\Support\Registry;

$data = [
    'colors' => [
        'red',
        'green',
        'blue',
    ],
    'year'   => 1987,
];

$collection = new Registry($data);

echo $collection->toJson(); // ["red","green","blue"],"year":1987}

echo $collection->toJson(74 + JSON_PRETTY_PRINT);
/**
{
    "colors": [
        "red",
        "green",
        "blue"
    ],
    "year": 1987
}
*/