hack文字形状
一个形状的文字创造了一个有价值的列表字段初始值设定项指定的字段命名的形状。在该列表中不需要的形状类型定义的字段说明符顺序相同的字段的初始化顺序。例如:
<?hh
namespace Hack\UserDocumentation\Shapes\Literals\Examples\Literals;
type Point = shape('x' => int, 'y' => int);
class C {
// All the right hand side expressions are shape literals
// Can't have a shape as a constant value
const Point ORIGIN = shape('x' => 0, 'y' => 0); // initializer rejected
public static Point $p2 = shape('x' => 0, 'y' => 5); // initializer okay
public Point $p3 = shape('x' => 0, 'y' => 5); // initializer okay
}
function createPoint(int $x = 0, int $y = 0): Point {
return shape('y' => $y, 'x' => $x); // shape literal, no compile-time constant
}
function run(): void {
var_dump(createPoint(9, 3));
var_dump(new C());
}
run();
文字形状必须初始化形状中的所有字段。
请注意,与形状一起使用的术语字面值是一个误称; 字段初始化器中的表达式不需要是编译时常量。即使所有的初始化器都是常量表达式,生成的形状文字本身也不是,因此不能在需要这样的表达式的上下文中使用。