کلاس ها/اشیا (Classes/Objects)
در PHP، «کلاس (Class)» الگوست و «شیء (Object)» نمونه ساخته شده. کلاس مثل نقشه مدرسه است. شیء همان مدرسه ساخته شده با رنگ متفاوت است.
یک سناریوی ساده از OOP
فرض کن کلاس «Fruit» داریم. ویژگی ها «name» و «color» هستند. هر میوه مقدار خودش را دارد.
تعریف کلاس
کلاس با کلیدواژه class ساخته می شود. همه ویژگی ها و متدها داخل آکلاد هستند.
<?php
class Fruit {
// code goes here...
}
?>
اکنون یک کلاس واقعی با دو ویژگی و دو متد بسازیم.
<?php
class Fruit {
public $name;
public $color;
function set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
}
?>
ساخت شیء از کلاس
با new شیء می سازیم. هر شیء همان ویژگی ها را دارد؛ اما مقادیرش فرق دارد.
<?php
class Fruit {
public $name;
public $color;
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();
?>
اکنون متدهای رنگ را اضافه می کنیم و چاپ می کنیم.
<?php
class Fruit {
public $name;
public $color;
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();
?>
کلیدواژه $this
$this به شیء فعلی اشاره می کند. فقط داخل متدها در دسترس است.
<?php
class Fruit {
public $name;
}
$apple = new Fruit();
?>
1) تنظیم داخل کلاس با $this و متد set_name:
<?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;
?>
بررسی نوع با instanceof
با instanceof می فهمیم شیء متعلق به کدام کلاس است.
<?php
$apple = new Fruit();
var_dump($apple instanceof Fruit);
?>
نکته: برای مرور مفاهیم پایه، صفحه OOP چیست؟ را هم ببین.
جمع بندی سریع
- کلاس نقشه است؛ شیء ساختمان ساخته شده است.
- با
newشیء می سازیم. $thisبه شیء فعلی اشاره می کند.instanceofنوع شیء را بررسی می کند.