3 function strip_hh_prefix($str, $nonobject_types_only = false) {
4 if (!is_string($str)) {
7 if (!is_int(stripos($str, 'HH\\'))) {
8 // Bail out early if $str doesn't contain 'HH\'
11 $nonobject_types = ImmSet
{
12 'bool', 'boolean', 'int', 'integer', 'float', 'double', 'real', 'num',
13 'string', 'resource', 'mixed', 'void', 'this', 'arraykey',
19 for ($i = 0; $i < $len; ++
$i) {
26 if ($i >= $len) break;
31 if ($c === $in_literal) {
35 if (($c === 'H' ||
$c === 'h') &&
36 strtoupper(substr($str, $i, 3)) === "HH\\" &&
37 !ctype_alnum($prev) && $prev !== '_' && $prev !== '\\') {
38 if ($nonobject_types_only) {
39 $sub = substr($str, $i +
3, 9);
40 $sub_len = strlen($sub);
42 for (; $k < $sub_len; ++
$k) {
44 if (!ctype_alnum($sub_c) && $sub_c !== '_' && $sub_c !== '\\') {
48 $sub = strtolower(substr($sub, 0, $k));
49 $strip = ($nonobject_types->contains($sub));
59 if ($c === '\'' ||
$c === '"') {
69 var_dump(strip_hh_prefix("HH\\bool", true));
70 var_dump(strip_hh_prefix("HH\\boolean", true));
71 var_dump(strip_hh_prefix("HH\\int", true));
72 var_dump(strip_hh_prefix("HH\\integer", true));
73 var_dump(strip_hh_prefix("HH\\float", true));
74 var_dump(strip_hh_prefix("HH\\double", true));
75 var_dump(strip_hh_prefix("HH\\real", true));
76 var_dump(strip_hh_prefix("HH\\num", true));
77 var_dump(strip_hh_prefix("HH\\string", true));
78 var_dump(strip_hh_prefix("HH\\resource", true));
79 var_dump(strip_hh_prefix("HH\\mixed", true));
80 var_dump(strip_hh_prefix("HH\\void", true));
81 var_dump(strip_hh_prefix("HH\\this", true));
82 var_dump(strip_hh_prefix("HH\\arraykey", true));