W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
類型常量的約束(Constraints)類似于泛型類型參數(shù)的約束,因為它們限制類型常量可能被覆蓋的內(nèi)容。
對抽象類型常量的約束要求任何覆蓋抽象類型常量的類必須是約束類型的子類型。
<?hh
namespace Hack\UserDocumentation\TypeConstants\Constraints\Examples\AbsClass;
abstract class AbsParent {
abstract const type Foo as arraykey;
}
class FirstChild extends AbsParent {
const type Foo = string; // good since string is arraykey.
}
class SecondChild extends AbsParent {
const type Foo = float; // typechecker error since float is not an arraykey.
}
/***
abstract-type-errors.php:13:7,17: Class Hack\UserDocumentation\TypeConstants\Constraints\Examples\AbsClass\SecondChild does not correctly implement all required methods (Typing[4110])
abstract-type-errors.php:13:27,35: Some methods are incompatible with those declared in type Hack\UserDocumentation\TypeConstants\Constraints\Examples\AbsClass\AbsParent
Read the following to see why:
abstract-type-errors.php:6:23,25: Unable to satisfy constraint on this type constant
abstract-type-errors.php:6:30,37: This is an array key (int/string)
abstract-type-errors.php:14:20,24: It is incompatible with a float
***/
一個具體的類型常量必須有一個約束,以便任何孩子覆蓋該類型的常量。
<?hh
namespace Hack\UserDocumentation\TypeConstants\Constraints\Examples\ConcClass;
class ParentWithConstraint {
const type Foo as arraykey = arraykey;
}
class Child extends ParentWithConstraint {
// good since string is arraykey and parent constrained to arraykey.
const type Foo = string;
}
class ParentWithoutConstraint {
const type Foo = arraykey;
}
class BadChild extends ParentWithoutConstraint {
// Although int is an arraykey, parent not constrained to arraykey, so this
// is a typechecker error.
const type Foo = int;
}
/***
concrete-type-errors.php:18:7,14: Class Hack\UserDocumentation\TypeConstants\Constraints\Examples\ConcClass\BadChild does not correctly implement all required methods (Typing[4110])
concrete-type-errors.php:18:24,46: Some methods are incompatible with those declared in type Hack\UserDocumentation\TypeConstants\Constraints\Examples\ConcClass\ParentWithoutConstraint
Read the following to see why:
concrete-type-errors.php:21:14,16: The assigned type of this type constant is inconsistent with its parent
concrete-type-errors.php:21:20,22: This is an int
concrete-type-errors.php:15:20,27: It is incompatible with an array key (int/string)
***/
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: