Hello Josh, 1) I think it would be better to have ObjectSafe Calls, e.g.
class User { ... public function delete() { // delete ... } } class Users { public function find($id) { if ($this->db->query(...)) return new User($id); return 'not found'; } } $users = new Users(); $result = $users->find(42)?->delete(); // $result = 'not found'; That way we can use scalars as return for further processing. Definition: Calling $obj?->foo(..) behaves identically to $obj->foo(..) if $obj is an object. If $obj is not an $object, then it returns $obj. 2) Another approach would to implement this in user land: class Failure { public function __construct($msg) { $this->msg = $msg; } public function __call($name, $args) { return $this; } } class User { ... public function delete() { // delete ... } } class Users { public function find($id) { if ($this->db->query(...)) return new User($id); return new Failure('not found'); } } $users = new Users(); $result = $users->find(42)->delete(); // do sth... if ($result instanceof Failure) { echo $result->msg; // not found } Regards Thomas Josh Watzman wrote on 10.12.2014 00:07: > Hey internals! A useful feature that Hack picked up in the last few months are > "nullsafe calls", a way of propagating failure forward in a series of chained > method calls to the end of the whole computation, getting rid of a lot of the > boilerplate in the middle. I think the feature would be a good one for PHP as > well, so I'm submitting this RFC to add it -- you can see the RFC itself for a > full discussion of the motivation for the feature, as well as the feature > itself: > > https://wiki.php.net/rfc/nullsafe_calls > > Josh Watzman > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php