/**
  * Initialization method
  * @param string $string data for object initialization
  * @throws InvalidReceiptException when receipt status code is invalid
  * @throws ExpiredSubscriptionException when subscription expired
  * @throws InvalidArgumentException wen initialization data incorrect
  * @return RenewableStatus initialized status object
  */
 public static function initializeByString($string)
 {
     $Object = json_decode($string);
     switch ($Object->status) {
         case self::STATUS_OK:
             if (!isset($Object->latest_receipt)) {
                 throw new InvalidArgumentException();
             } else {
                 $RenewableStatus = new self();
                 $RenewableStatus->setLatestReceipt($Object->latest_receipt)->setLatestReceiptInfo(RenewableReceipt::initializeByObject($Object->latest_receipt_info))->setStatus($Object->status)->setReceipt(RenewableReceipt::initializeByObject($Object->receipt));
                 return $RenewableStatus;
             }
         case self::STATUS_EXPIRED_SUBSCRIPTION:
             $RenewableStatus = new self();
             $RenewableStatus->setStatus($Object->status)->setReceipt(RenewableReceipt::initializeByObject($Object->receipt));
             throw new ExpiredSubscriptionException($RenewableStatus);
         default:
             $exceptionClass = self::checkStatus($Object->status);
             $Exception = new $exceptionClass($string, $Object->status);
             throw $Exception;
     }
 }