🍊

PHPのClassという概念についての備忘録(続)

に公開

前回まで

インスタンスという概念が出て来たあたりから???が止まらなくなってしまったので、Gemini先生に「小学生にでも分かるように優しく解説をしてもらった」

現状理解していること

動画講義を通して現状理解したこと。

Classだけでは何もできないということ

Classは設計図とイコールのものとされており、そのものだけでは何もできない。Classではインスタンスがどんな情報を持ち、どんな機能を持っているかを定める場所。

インスタンス

インスタンスはClassという設計図をもとに作られた実体のこと。インスタンスはClassで定義されたプロパティやメソッドを持っているが、プロパティの中身(値)はインスタンスごとに異なる。

動画講義の続き

ProductというClassの中にインスタンスを作成。またそれぞれどのような処理をするかを定義。

<?php 
    class Product {
        private $id;
        private $name;
        private $price;
        private $image;

        
        public function __construct($id, $name, $price, $image) {
            $this->id = $id;
            $this->name = $name;
            $this->price = $price;
            $this->image = $image;
            
        }

        public function getName() {
            return $this-> name;
        }
        public function getId() {
            return $this-> id;
        }
        public function getPrice() {
            return $this-> price;
        }
        public function getImage() {
            return $this-> image;
        }
    }
?>

連想配列の書き換え

連想配列に入れていたデータをインスタンスの中に書き換える。

$products = [
    [
        "id" => "avocado",
        "name" => "アボカド",
        "price" => 230,
        "image" => "./images/image_1.jpg"
    ],
    [
        "id" => "orange",
        "name" => "オレンジ",
        "price" => 1000,
        "image" => "./images/image_2.jpg"
    ],
    [
        "id" => "lemon",
        "name" => "レモン",
        "price" => 220,
        "image" => "./images/image_3.jpg"
    ],
    [
        "id" => "pineapple",
        "name" => "パイナップル",
        "price" => 230,
        "image" => "./images/image_4.jpg"
    ]
]

↓これを

<?php
require_once 'classes/product.php';
$products = [
    new Product("avocado", "アボカド", 230, "./images/image_1.jpg"),
    new Product("orange", "オレンジ", 1000, "./images/image_2.jpg"),
    new Product("lemon", "レモン", 220, "./images/image_3.jpg"),
    new Product("pineapple", "パイナップル", 500, "./images/image_4.jpg")
];
?>

index.phpの書き換え

連想配列からecho $product["image"]などとしていたものをインスタンスで書き換える。

<div class="cards-container">
<?php foreach ($products as $product): ?>
   <div class="card">
     <img class="card-image" src="<?php echo $product->getImage(); ?>" alt="">
         <p class="card-title"><?php echo $product->getName(); ?></p>
         <div class="flex justify-between">
            <p class="card-price"><?php echo displayPrice($product->getPrice()); ?></p>
                <input form="cart" min="0" name="<?php echo $product->getId(); ?>" class="item-number" type="number" value="0">
          </div>
  </div>
<?php endforeach; ?>
</div>

まとめ

連想配列で指定していたID、商品名などをインスタンスを作成したことで、コード量が減った。
まだ完全に理解しきっていないけど、明日以降続きを学習していく。
(コーディングしたい)

Discussion