/
  • Visibility

  • ارسال پاسخ   امتیاز موضوع:
    • 1 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی Visibility
    نویسنده پیام
    hidensoft آفلاین
    عضو ارشد
    *****

    ارسال‌ها: 1,385
    تاریخ عضویت: ۱۳۸۸ شهريور ۳
    اعتبار: 46
    تشکرها : 729
    ( 1395 تشکر در 782 ارسال )
    ارسال: #1
    Exclamation Visibility
    سلام
    امروز می خوام در مورد 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:
    <?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
    hidensoft آفلاین
    عضو ارشد
    *****

    ارسال‌ها: 1,385
    تاریخ عضویت: ۱۳۸۸ شهريور ۳
    اعتبار: 46
    تشکرها : 729
    ( 1395 تشکر در 782 ارسال )
    ارسال: #2
    RE: Visibility
    Method Visibility
    ببینید خواص Public , Protected , Private در متغیر ها و فانکشن ها یکسان هستند.
    نیاز به توضیح جدیدی نیست فقط توجه داشته باشید که اگر فانکش رو بدون استفاده از Private , Public , Protected تعریف کنید از نوع Public در نظر گرفته می شه
    به این مثال هم یه نگاهی کنید.
    کد PHP:
    <?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 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS