PHP 억세스권(접근권한) : Visibility

PHP/매뉴얼 번역 2008/06/19 17:33
억세스권 (접근권한 :Visibility )

프로퍼터(속성) 또는 메소드의 억세스권 (visibility) 은  키워드 public, protected 또는 private 를 지정하여 정의할 수 있다. public 으로 정의된 아이템은 어디에서도 억세스가 가능하다. protected 는 상속받은 클래스 또는 부모클래스  (그리고 아이템을 정의한 클래스) 로 억세스를 제한한다. private 는 아이템을 정의한 클래스에서만 억세스할 수 있다. 


멤버의 억세스권 (Members Visibility)

클래스의 멤버는 public, private, protected 로 정의하여야 한다.

멤버선언 예

<?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

?>


주의: 키워드 var 로 변수 선언을 하는 PHP 4 의 방법은 호환성을 유지하기 위하여 여전히 지원하고 있다. ( public 과 같은 의미) PHP 5.1.3  이전에서는 var 변수를 사용하면 E_STRICT 경고가 발생한다.

메소드의 억세스권 (Method Visibility)

클래스메소드는 public, private, 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
?> 


원문링크: http://www.php.net/manual/en/language.oop5.visibility.php

목차에
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5



 

Trackback 0 : Comment 0