• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Visibility
#1
Exclamation 
سلام
امروز می خوام در مورد Protected , Private , Public در Class Property براتون بنوسیم.
Property Visibility
توضیحات کلی :
Private :
به معنای شخصی . متغیر هایی که از این نوع خصوصیت بحره می برند بطور کامل شخصی سازی می شوند یعنی دسترسی مستقیم به متغیر خارج کلاس امکان پذیر نیست و شما با پیغام Fatal Error مواجه می شوید. یکی دیگر از خصوصیات این نوع متغیر ها اینه که اگر کلاس شما از یک کلاس دیگه ارث می بره به هیچ وجه شما نمی تونید متغیری که در کلاس والد بصورت Private استفاده شده رو redeclare کنید یا بهتر بگم در دو کلاس که از یک دیگر ارث می برند نمی توانید دو متغیر Private با یک نام داشته باشید. یکی دیگر از مزایای این نوع متغیر ها این هست که اگر متغیر در کلاس والد باشه و شما بخواید از کلاس فرزند به این متغیر دسترسی داشته باشید با پیغام Undefined Variable مواجه میشید یعنی اصلا این نوع متغیر در کلاس تعریف نشده. این به این معنی هست که شما می تونید با همین نام اما با دیگر خصوصیت ها از این متغیر استفاده کنید.
Protected:
به معنای محافظت شده. متغیر هایی که از این نوع خصوصیت بحره می برند مانند Private شخصی سازی می شوند اما با یک سری تغییرات. متغیر خارج کلاس غیر قابل دسترسی هست اما بصورت مستقیم. برعکس Private شما امکان redeclare کردن متغیر هایی با خصوصیت Public و استاتیک رو در کلاس فرزند دارید. از طریق کلاس فرزند می توانید به متغیر از نوع Protected دسترسی مستقیم داشته باشید.
Public:
به معنی عمومی . این نوع متغیر ها از همه جهت قابل دسترس هستند. از بیرون کلاس ، از داخل کلاس فرزند ، تقریبا شما همه جوره به این نوع متغیر دسترسی دارید.
Var:
همانند Public

جمع بندی کلی :
اگر متغیری دارید که می خواهید دسترسی فقط و فقط محدود به کلاس خودش باشه باید از نوع Private تعریف بشه ، اگر متغیر محدود به کلاس خود و کلاس فرزند می شه باید از نوع Protected تعریف بشه. اگر هم متغیر بصورت آزاد باید فعالیت داشته باشه می تونید از نوع Public تعریف کنید.

یک مثال :
کد پی‌اچ‌پی:
<?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 
به کامنت ها توجه کنید!
فقط یه توضیح خدمت دوستان بدم اگر پیغام Undefined Variable رو مشاهده نکردید به این دلیل هست که گزارش خطا در php.ini خاموش هست. برای اطلاعات بیشت یه نگاهی به اینجا هم بندازید

جلسه بعد در مورد Method Visibility ها صحبت می کنیم.
  پاسخ
تشکر شده توسط : HiddeN Alimokhlesi molana parvane zoghal .php cyletech
#2
Method Visibility
ببینید خواص Public , Protected , Private در متغیر ها و فانکشن ها یکسان هستند.
نیاز به توضیح جدیدی نیست فقط توجه داشته باشید که اگر فانکش رو بدون استفاده از Private , Public , Protected تعریف کنید از نوع Public در نظر گرفته می شه
به این مثال هم یه نگاهی کنید.
کد پی‌اچ‌پی:
<?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 هست
  پاسخ
تشکر شده توسط : admin HiddeN zoghal parvane Alimokhlesi yakouza cyletech


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان