> > I believe returning null in those situations makes the most intuative > sense, yes.
No offense, but how can casting semantics different from those already used in implicit casting be intuitive? function a(int $x) { var_export($x); } function b(?int $x) { var_export($x); } a("123"); // 123 a(null); // TypeError a("abc"); // TypeError b("123"); // 123 b(null); // NULL b("abc"); // TypeError IMO, the only reasonable choice is therefore: (int) "123"; // 123 (int) null; // TypeError (int) "abc"; // TypeError (?int) "123"; // 123 (?int) null; // NULL (?int) "abc"; // TypeError At least, if we want to fix the current behaviour, and not introduce another inconsistency. In other words, *strictly apply to explicit casting the rules of implicit casting when strict_types is disabled*. -- Ben