This looks pretty ugly. Modifying a zval that was not passed by reference is bad manners. And in the method call case, it's really weird that you do `$obj->final()` and suddenly `$obj` is null. I'd not do the conversion here and just rely on the context-initialization exceptions mentioned in a different comment to prevent further usage of this object.