* [ * [ * 'code' => (int)商品コード, * 'name' => (string)商品名, * 'quantity' => (int)在庫数, * ],...(以後繰り返し) * ] * * * @return array 在庫状況が格納された配列 * @throws \SKJ\AppException\Logic\EnvironmentException 環境不備(1,2) * @throws \SKJ\AppException\Runtime\OutOfBoundsException データ不備(3) * @throws \SKJ\AppException\Runtime\EmptyResultException データが空(4) * @throws \SKJ\AppException\Logic\UnexpectedValueException 異常終了(5) * @throws \SKJ\AppException\Logic\ContainerException 未知、未分類の例外(6) * @uses self::READ_STOCK_E01 在庫管理ファイルが開けない * @uses self::READ_STOCK_E02 商品管理ファイルが開けない * @uses self::READ_STOCK_E03 存在しない商品コード * @uses self::READ_STOCK_E04 在庫が未登録 * @uses self::READ_STOCK_E05 異常終了 * @uses self::READ_STOCK_E06 未知、未分類の例外 */ public function readStock() { try { if (($fp = @fopen('stock.csv', 'r')) === false) { throw new \SKJ\AppException\Logic\EnvironmentException( '在庫管理ファイルが見つかりません!!', self::READ_STOCK_E01 ); } $stock = []; try { while (($line = fgetcsv($fp)) !== false) { $stock[] = [ 'code' => (int)$line[0], 'name' => $this->getItemName((int)$line[0]), 'quantity' => (int)$line[1], ]; } } catch (\SKJ\AppException\Logic\EnvironmentException $e) { throw new \SKJ\AppException\Logic\EnvironmentException( $e->getMessage(), self::READ_STOCK_E02, $e ); } catch (\SKJ\AppException\Runtime\OutOfBoundsException $e) { throw new \SKJ\AppException\Runtime\OutOfBoundsException( $e->getMessage(), self::READ_STOCK_E03, $e ); } if (empty($stock)) { throw new \SKJ\AppException\Runtime\EmptyResultException( '在庫がありません!!', self::READ_STOCK_E04 ); } if (fclose($fp) === false) { throw new \SKJ\AppException\Logic\UnexpectedValueException( '異常終了しました!!', self::READ_STOCK_E05 ); } return $stock; } catch (\Exception $e) { throw new \SKJ\AppException\Logic\ContainerException( null, self::READ_STOCK_E06, $e ); } } } $shop = new Shop(); try { foreach ($shop->readStock() as $item) { printf('%sの在庫数は%d個です'.PHP_EOL, $item['name'], $item['quantity']); } } catch (\SKJ\AppException\Logic\EnvironmentException $e) { switch ($e->getCode()) { case Shop::READ_STOCK_E01: die('在庫管理ファイルに問題があります'.PHP_EOL); case Shop::READ_STOCK_E02: die('商品管理ファイルに問題があります'.PHP_EOL); } } catch (\SKJ\AppException\Runtime\OutOfBoundsException $e) { die('存在しない商品コードがあります'.PHP_EOL); } catch (\SKJ\AppException\Runtime\EmptyResultException $e) { die('在庫が全く存在しません'.PHP_EOL); } catch (\SKJ\AppException\Logic\UnexpectedValueException $e) { die('異常終了です'.PHP_EOL); } catch (\SKJ\AppException\Logic\ContainerException $e) { die('未知、未分類の障害が発生しました!!'.PHP_EOL); }