در php یک فرزند حق دارد از یک والد ارث بری کند ولی اگر نیاز داشته باشیم که از چند کلاس ارث بری داشته باشیم برای رفع این محدودیت از Traits استفاده میکنیم.
Table of contents [Show]
trait یک اسم داره که هر جا تو هر کلاسی لازم داشتیم که استفاده کنیم با use اسم trait رو استفاده میکنیم. می توانیم چند بار هم استفاده کنیم.
Syntax
<?php
trait TraitName {
// some code…
}
?>
می توانیم چندتا traitهم تعریف کنیم و در کلاسها استفاده کنیم.
<?php
trait message1 {
public function msg1() {
echo “OOP is fun! “;
}
}
trait message2 {
public function msg2() {
echo “OOP reduces code duplication!”;
}
}
class Welcome {
use message1;
}
class Welcome2 {
use message1, message2;
}
$obj = new Welcome();
$obj->msg1();
echo “<br>”;
$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();
?>
پیشنهاد ویژه: آموزش رایگان PHP
برای اینکه بتوانیم فراخوانیهای درستی داشته باشیم باید توابع رو static تعریف کنیم.
Syntax
<?php
class ClassName {
public static function staticMethod() {
echo “Hello World!”;
}
}
?>
برای استفاده از static باید اسم کلاس رو بنویسیم بعد :: قرار بدهیم و staticMethod() رو قرار بدهیم: ClassName::staticMethod();
در این حالت برای دسترسی نیازی به نمونه سازی نداریم و به طریق بالا دسترسی پیدا میکنیم.
<?php
class greeting {
public static function welcome() {
echo “Hello World!”;
}
}
// Call static method
greeting::welcome();
?>
وقتی داخل متد استاتیک از constructor استفاده کنیم میتوانیم از کلمه self به جای استاتیک استفاده میکنیم.
<?php
class greeting {
public static function welcome() {
echo “Hello World!”;
}
public function __construct() {
self::welcome();
}
}
new greeting();
?>
علاوه بر توابع می توانیم خصوصیات را نیز استاتیک تعریف کنیم و بدون ایجاد نمونه به آنها دسترسی پیدا کنیم .
Syntax
<?php
class ClassName {
public static $staticProp = “W3Schools”;
}
?>
برای دسترسی به این خصوصیات استاتیک به صورت زیر عمل می کنیم:
ClassName::$staticProp;
<?php
class pi {
public static $value = 3.14159;
}
// Get static property
echo pi::$value;
?>
Namespacesها کمک میکنند ما از کتابخانه ها استفاده کنیم. namespace Html;
کتابخانه html شامل توابع و متدهایی است که داخل آن هست و می توانیم با namespace به آن دسترسی پیدا کنیم.
اگر namespace زیرشاخه یک namespace دیگهای باشه به شکل زیر بهش دسترسی پیدا میکنیم. namespace Code\Html;
برای استفاده از namespace می توانیم بدون فراخوانی کتابخانه به آن دسترسی پیدا کنیم. مثال زیر برای html است:
$table = new Html\Table()
$row = new Html\Row();