跳转到内容

注册组件


概览

Phalcon\Support\Registry是一个面向对象的数组。它扩展了Phalcon\Support\Collection但不能被进一步扩展,因为其所有方法都被声明为final。它提供速度以及各种 PHP 接口的实现。这些接口包括:

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

构造函数

您可以像构造 PHP 中的任何其他对象一样构造该对象。然而,构造函数接受一个可选参数,该参数将为您填充对象。array参数,它将为你填充对象。

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

重用

您还可以通过重新填充来重用该组件。Phalcon\Support\Registry暴露了clear()init()方法,它们将分别清除并重新填充内部数组,

<?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

获取

如上所述,Phalcon\Support\Registry实现了几个接口,以使该组件尽可能灵活。可以通过以下方式检索存储在元素中的数据:- 属性 -__get()- 基于数组的获取 ($collection[$element]) -offsetGet() - get()

最快的方法是使用属性语法:

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

echo $collection->year; // 1987

你可以使用__get($element)但是不建议这样做,因为它比属性语法慢得多。同样的规则适用于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

使用get()提供了三个额外参数。当$defaultValue在调用中定义且未找到元素时,$defaultValue将被返回。参数cast接受定义返回值将被转换为何种类型的字符串。可用的值有:

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

是否存在

要检查集合中是否存在某个元素,可以使用以下方法:-isset()在属性上 -__isset()- 基于数组的 isset (isset($collection[$element])) -offsetExists() - has()

最快的方法是使用属性语法:

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

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

你可以使用__isset(element)但是不建议这样做,因为它比属性语法慢得多。同样的规则适用于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

设置

要在集合中设置一个元素,可以使用以下方法:- 将值赋给属性 -__set()- 基于数组的赋值 -offsetSet() - set()

最快的方法是使用属性语法:

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

$collection->year = 1987;

你可以使用__set($element, $value)但是不建议这样做,因为它比属性语法慢得多。同样的规则适用于offsetSet

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

移除

要从集合中移除一个元素,可以使用以下方法:- unset 属性 -__unset()- 基于数组的 unset -offsetUnset() - remove()

最快的方法是使用属性语法:

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

unset($collection->year);

你可以使用__unset($element)但是不建议这样做,因为它比属性语法慢得多。同样的规则适用于offsetUnset

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

迭代

由于集合对象实现了\IteratorAggregate,您可以轻松地遍历该对象。方法getIterator()返回一个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;
}

计数

\Countable接口的实现暴露了count()方法,该方法存储集合中的元素数量。

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

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

序列化

The \Serializable\JsonSerializable接口暴露了允许您序列化和反序列化对象的方法。serialize()unserialize()使用 PHP 的serializeunserialize函数。jsonSerialize()返回一个可用于序列化的数组json_encode来序列化对象。

<?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

转换

Phalcon\Support\Registry还暴露了两个转换方法:toArray()toJson(int $options). toArray()返回作为数组转换的对象。此方法返回与jsonSerialize().

<?php

use Phalcon\Support\Registry;

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

$collection = new Registry($data);

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

toJson(int $options)返回对象的 JSON 表示形式。它内部使用json_encode并接受一个表示标志的参数json_encode接受。默认情况下,选项设置为 79,(RFC4327) 它表示:-JSON_HEX_TAG - JSON_HEX_APOS - JSON_HEX_AMP - JSON_HEX_QUOT - JSON_UNESCAPED_SLASHES

您可以根据需要向该方法传递任何有效的标志。

<?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
}
*/
无噪 Logo
无噪文档
25 年 6 月翻译
文档源↗