W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
使用Hack集合與使用數(shù)組非常相似。事實上,您可以使用Hack集合在常規(guī)<?php文件中,因為它們直接構(gòu)建到HHVM運行時(唯一的注意事項是在<?php文件中,必須使用前綴HH\)。
構(gòu)建Hack集合可以使用new或稱為文字語法來完成。這兩個都基本上是如何創(chuàng)建數(shù)組的混合。
如果要創(chuàng)建Hack集合并提供集合顯式值(或鍵/值對),則要使用文字語法。
$collection = <CollectionType> { val1, val2, ... , valN };
$collection = <KeyedCollectionType> { key1 => val1, key2 => val2, ... , keyN => valN}
<?hh
namespace Hack\UserDocumentation\Collections\Constructing\Examples\Literal;
function run(): void {
$vec = Vector {'A', 'B', 'C'};
$ivec = ImmVector {'A', 'B', 'C'};
$map = Map {'A' => 1, 'B' => 2, 'C' => 3};
$set = Set {'A', 'B', 'C'};
$pair = Pair {'A', 'B'};
var_dump($vec);
var_dump($ivec);
var_dump($map);
var_dump($set);
var_dump($pair);
}
run();
Output
object(HH\Vector)#1 (3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
object(HH\ImmVector)#2 (3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
object(HH\Map)#3 (3) {
["A"]=>
int(1)
["B"]=>
int(2)
["C"]=>
int(3)
}
object(HH\Set)#4 (3) {
string(1) "A"
string(1) "B"
string(1) "C"
}
object(HH\Pair)#5 (2) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
}
您可以在任何地方使用文字語法array(),包括初始化對象或類屬性的表達(dá)式。
<?hh
namespace Hack\UserDocumentation\Collections\Constructing\Examples\ClassProp;
class A {
public static Map<int, string> $users = Map {};
public static array<int, string> $users_a = array();
// Cannot do something like this because function calls
// aren't allowed in static class property initializers
//public static Map<int, string> $users_bad = Map {rand(0, 10) => 'a'};
}
function run(): void {
A::$users[0] = "Joel";
A::$users_a[0] = "Fred";
var_dump(A::$users);
var_dump(A::$users_a);
}
run();
Output
object(HH\Map)#1 (1) {
[0]=>
string(4) "Joel"
}
array(1) {
[0]=>
string(4) "Fred"
}
沒有用于文字語法的類型參數(shù)(例如,$v = Vector<int> {1};是語法錯誤)。該typechecker將推斷和跟蹤類型的內(nèi)部。
您還可以使用new創(chuàng)建Hack集合的實例。但是,您必須傳遞構(gòu)造函數(shù)a Traversable(像數(shù)組)或null。
$ collection = new <CollectionType>(?Traversable <Tv> $ t);
$ collection = new <KeyedCollectionType>(?KeyedTraversable <Tk,Tv> $ t);
<?hh
namespace Hack\UserDocumentation\Collections\Constructing\Examples\UsingNew;
function convert(array<int> $arr): Vector<int> {
var_dump($arr instanceof Traversable);
return new Vector($arr);
}
function run(): void {
$arr = array(1, 2, 3);
var_dump(convert($arr));
}
run();
Output
bool(true)
object(HH\Vector)#1 (3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: