I'm not certain, but I do not believe there is a way to change the object type internally. At least, I've been unable to have a __construct() return an object of a different class.
The easiest way, perhaps, would be to create a static initializer method in SpecialUser which takes in an IPSMember object and translates the properties, returning a SpecialUser object.
class SpecialUser extends IPSMember
{
public static function initWithIPSMember (IPSMember $ipsMember)
{
$specialUserObj = new SpecialUser();
// translate any properties
return $specialUserObj;
}
}
The Reflection Class's getproperties method may enable you do to this quickly. http://php.net/manual/en/reflectionclass.getproperties.php
Hopefully someone can offer you a quicker solution.
Good luck.