کلاس‌‌ها و اشیا (PHP 5)
PHP Manual

واسط‌های شی

واسط‌های شی به شما امکان می‌دهد تا متدهای کلاس را که باید پیاده‌سازی گردند مشخص نماید بدون این که نحوه کار با این متدها مشخص شده باشد.

واسط‌ها توسط کلمه کلیدی interface بصورت یکسان در کلاس‌های استاندارد است اما بدون این که هیچ یک از متدهای آن تعریف شده باشد.

تمام متدهای اعلام شده باید public باشند که طبیعت یک واسط است.

implements

برای پیاده‌سازی یک واسط عملگر the implements استفاده می‌شود. تمام متدها در واسط باید در داخل یک کلاس تعریف شده باشد. ناکامی در این کار یک خطای مرگبار ایجاد می‌نماید. کلاس‌های ممکن است بیش از یک واسط تعریف نماید که با جدا نمودن آنها با استفاده از کاما ممکن است.

Note:

یک کلاس نمی‌تواند دو واسط با اشتراک نام بسازد زیرا دارای ابهام است.

Note:

واسط‌ها همانند کلاس‌ها با استفاده از عملگر extends گسترش می‌یابد.

Note:

کلاس پیاده‌سازی کننده واسط باید از همان امضاهای متد تعریف شده در واسط استفاده کند. عدم انجام این کار موجب خطای اصلی می‌شود.

ثابت‌ها

واسط‌ها امکان دارد شامل ثابت باشند. ثابت‌های واسط همانند ثابت‌های کلاس عمل می‌کنند به جز این که آنها امکان بازنویسی توسط کلاس یا واسط ارث‌برنده را ندارند.

Examples

Example #1 مثال واسط

<?php
// Declare the interface 'iTemplate'
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Implement the interface
// This will work
class Template implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
  
    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }
 
        return 
$template;
    }
}

// This will not work
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}

?>

Example #2 واسط قابل گسترش

<?php
interface a
{
    public function 
foo();
}

interface 
extends a
{
    public function 
baz(Baz $baz);
}

// This will work
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// This will not work and result in a fatal error
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}
?>

Example #3 وراثت از چند واسط

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Example #4 واسط‌ها به همراه ثابت‌ها

<?php
interface a
{
    const 
'Interface constant';
}

// Prints: Interface constant
echo a::b;


// This will however not work because its not allowed to
// override constants.
class implements a
{
    const 
'Class constant';
}
?>

واسط به همراه راهنمای نوع راه خوبی برای اطمینان همراه بودن متدهای خاص در شی است. عملگر instanceof و type hinting را ببینید.


کلاس‌‌ها و اشیا (PHP 5)
PHP Manual