hack元组与数组的关系
在HHVM的封面下,元组实际上只是受限制的数组。
原理
你不能改变元组的元素数量,你可以改变一个元组的值,当且仅当新值是的相同类型的当前值。
如果试图将值更改为不同类型的值,则Hack类型检查器将引发错误(但是,由于元组只是数组中的数组,因此HHVM将顺畅地运行)。
<?hh
namespace Hack\UserDocumentation\Tuples\RelationshipToArrays\Examples\ChgValue;
function run(): void {
$t = tuple (3, "str", array(1, 2));
var_dump($t);
$t[0] = 4;
$t[1] = "hi";
$t[2] = array("hello", 1000);
$t[1] = 100; // type error since [1] is originally a string
var_dump($t);
}
run();
Output
array(3) {
[0]=>
int(3)
[1]=>
string(3) "str"
[2]=>
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
}
array(3) {
[0]=>
int(4)
[1]=>
int(100)
[2]=>
array(2) {
[0]=>
string(5) "hello"
[1]=>
int(1000)
}
}
Reading
您可以使用数组方括号语法从元组中读取数据。然而,从元组中读取最常见的方法是使用list()
分配。
<?hh
namespace Hack\UserDocumentation\Tuples\RelationshipToArrays\Examples\ChgValue;
function run(): void {
$t = tuple (3, "str", array(1, 2));
var_dump($t[1]); // literal syntax
list($i, $s, $arr) = $t; // list assignment
var_dump($i);
var_dump($s);
var_dump($arr);
}
run();
Output
string(3) "str"
int(3)
string(3) "str"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}