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

Visibility

visibility برای یک ویژگی یا متد توسط پیشوند اعلامی کلمات کلیدی زیر مشخص می‌شود: public٬ protected یا private. Public موارد را دسترسی عمومی می‌دهد. Protected دسترسی به کلاس‌های والد و به ارث برده محدود می‌کند (و کلاس تعریف کننده مورد). Private دسترسی را به کلاس تعریف کننده محدود می‌سازد.

Visibility برای اعضا

اعضای کلاس باید با public٬ private٬ یا protected تعریف شود. اگر با استفاده از var بدون کلمه visibility تعریف شوند ویژگی public خواهد بود.

Example #1 اعلام متد

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public 
$public 'Public';
    protected 
$protected 'Protected';
    private 
$private 'Private';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj = new MyClass();
echo 
$obj->public// Works
echo $obj->protected// Fatal Error
echo $obj->private// Fatal Error
$obj->printHello(); // Shows Public, Protected and Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    
// We can redeclare the public and protected method, but not private
    
protected $protected 'Protected2';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj2 = new MyClass2();
echo 
$obj2->public// Works
echo $obj2->private// Undefined
echo $obj2->protected// Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined

?>

Note: متد PHP 4 برای اعلام یک متغیر با کلمه کلیدی var هنوز برای تطبیق پشتیبانی می‌شود (به عنوان هم معنی کلمه public). در PHP 5 پیش از 5.1.3 استفاده آن یک هشدار E_STRICT ایجاد می‌نمود.

Visibility Method

متدهای کلاس باید با public٬ private٬ یا protected تعریف شود. متدهای بدون اعلام بصورت public در نظر گرفته می‌شوند.

Example #2 اعلام متد

<?php
/**
 * Define MyClass
 */
class MyClass
{
    
// Declare a public constructor
    
public function __construct() { }

    
// Declare a public method
    
public function MyPublic() { }

    
// Declare a protected method
    
protected function MyProtected() { }

    
// Declare a private method
    
private function MyPrivate() { }

    
// This is public
    
function Foo()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // Works
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Public, Protected and Private work


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    
// This is public
    
function Foo2()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate(); // Fatal Error
    
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Public and Protected work, not Private

class Bar 
{
    public function 
test() {
        
$this->testPrivate();
        
$this->testPublic();
    }

    public function 
testPublic() {
        echo 
"Bar::testPublic\n";
    }
    
    private function 
testPrivate() {
        echo 
"Bar::testPrivate\n";
    }
}

class 
Foo extends Bar 
{
    public function 
testPublic() {
        echo 
"Foo::testPublic\n";
    }
    
    private function 
testPrivate() {
        echo 
"Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>


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