1--TEST--
2Test typed static property with assign op operators
3--FILE--
4<?php
5function &stringRef() {
6	static $a = "1";
7	$b = $a;
8	$a = &$b;
9	return $a;
10}
11
12class Foo {
13	public static int $i = 0;
14	public static string $s = "1";
15}
16
17Foo::$s .= "1";
18var_dump(Foo::$s);
19
20Foo::$s += 2;
21var_dump(Foo::$s);
22
23Foo::$s = &stringRef();
24Foo::$s .= 2;
25var_dump(Foo::$s);
26
27Foo::$i += stringRef();
28var_dump(Foo::$i);
29
30try {
31	Foo::$i += PHP_INT_MAX;
32} catch (TypeError $e) { print $e->getMessage()."\n"; }
33var_dump(Foo::$i);
34
35try {
36	Foo::$i .= PHP_INT_MAX;
37} catch (TypeError $e) { print $e->getMessage()."\n"; }
38var_dump(Foo::$i);
39
40?>
41--EXPECT--
42string(2) "11"
43string(2) "13"
44string(2) "12"
45int(1)
46Typed property Foo::$i must be int, float used
47int(1)
48Typed property Foo::$i must be int, string used
49int(1)
50