PHPOOP-クラスとオブジェクト
クラスはオブジェクトのテンプレートであり、オブジェクトはクラスのインスタンスです。
OOPケース
Fruitという名前のクラスがあるとしましょう。Fruitには、name、color、weightなどのプロパティを含めることができます。$ name、$ color、$ weightなどの変数を定義して、これらのプロパティの値を保持できます。
個々のオブジェクト(リンゴ、バナナなど)が作成されると、それらはクラスからすべてのプロパティと動作を継承しますが、各オブジェクトのプロパティの値は異なります。
クラスを定義する
class
クラスは、キーワード、クラスの名前、および中括弧({})のペアを使用して定義されます。そのすべてのプロパティとメソッドは中括弧の中にあります。
構文
<?php
class Fruit {
// code goes here...
}
?>
以下では、2つのプロパティ($ nameと$ color)と、$ nameプロパティを設定および取得するための2つのメソッドset_name()とget_name()で構成されるFruitという名前のクラスを宣言します。
<?php
class Fruit {
// Properties
public
$name;
public $color;
// Methods
function
set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
}
?>
注:クラスでは、変数はプロパティと呼ばれ、関数はメソッドと呼ばれます。
オブジェクトを定義する
クラスはオブジェクトなしでは何もありません!クラスから複数のオブジェクトを作成できます。各オブジェクトには、クラスで定義されているすべてのプロパティとメソッドがありますが、プロパティ値は異なります。
クラスのオブジェクトは、new
キーワードを使用して作成されます。
以下の例では、$ appleと$ bananaはFruitクラスのインスタンスです。
例
<?php
class Fruit {
// Properties
public
$name;
public $color;
// Methods
function
set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
}
$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');
echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>
以下の例では、$ colorプロパティを設定および取得するために、Fruitクラスにさらに2つのメソッドを追加します。
例
<?php
class Fruit {
// Properties
public $name;
public $color;
// Methods
function set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
function set_color($color) {
$this->color = $color;
}
function get_color() {
return $this->color;
}
}
$apple = new Fruit();
$apple->set_name('Apple');
$apple->set_color('Red');
echo "Name: " . $apple->get_name();
echo "<br>";
echo "Color: " . $apple->get_color();
?>
PHP- $ thisキーワード
$ thisキーワードは現在のオブジェクトを参照し、メソッド内でのみ使用できます。
次の例を見てください。
例
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
?>
では、$ nameプロパティの値はどこで変更できますか?2つの方法があります:
1.クラス内(set_name()メソッドを追加して$ thisを使用):
例
<?php
class Fruit {
public $name;
function set_name($name) {
$this->name = $name;
}
}
$apple = new Fruit();
$apple->set_name("Apple");
echo $apple->name;
?>
2.クラスの外部(プロパティ値を直接変更することによる):
例
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
$apple->name = "Apple";
echo $apple->name;
?>
PHP-instanceof
キーワードを使用してinstanceof
、オブジェクトが特定のクラスに属しているかどうかを確認できます。
例
<?php
$apple = new Fruit();
var_dump($apple instanceof
Fruit);
?>