ДоХтор, но ты в аргумент проверку типа Foo убери, и в конструкторе сделай проверку типа, в которой если объект не подходит, вызывать преобразователь, который в итоге вызовет new self($args);
ДоХтор, но ты в аргумент проверку типа Foo убери, и в конструкторе сделай проверку типа, в которой если объект не подходит, вызывать преобразователь, который в итоге вызовет new self($args);