PHP 억세스권(접근권한) : Visibility
PHP/매뉴얼 번역 2008/06/19 17:33프로퍼터(속성) 또는 메소드의 억세스권 (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
?> 메소드의 억세스권 (Method Visibility)
클래스메소드는 public, private, protected 으로 정의하여야 한다. 어떤선언도 없는 메소드는 기본적으로 public 로 정의 된다.
메소드 선언 예
/**
* 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
'PHP > 매뉴얼 번역' 카테고리의 다른 글
| PHP 오브젝트 인터페이스 (0) | 2008/06/20 |
|---|---|
| PHP 클래스의 추상화 (0) | 2008/06/19 |
| PHP 클래스 정수 (0) | 2008/06/19 |
| PHP static 키워드 (0) | 2008/06/19 |
| PHP 스코프 연산자(::) (0) | 2008/06/19 |
| PHP 억세스권(접근권한) : Visibility (0) | 2008/06/19 |
| PHP 컨스트럭터와 디스트럭터 (0) | 2008/06/19 |
| PHP 오브젝트의 오토로딩 (0) | 2008/06/19 |
| PHP 클래스의 기초 (0) | 2008/06/19 |
| PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5 (0) | 2008/06/19 |
| PHP 언어레퍼런스 예외(exceptions) (0) | 2008/06/17 |