>  기사  >  백엔드 개발  >  php: 클래스 멤버에 대한 액세스 제어

php: 클래스 멤버에 대한 액세스 제어

黄舟
黄舟원래의
2017-07-02 10:56:472658검색

액세스 제어

properties 또는 메소드에 대한 액세스 제어는 앞에 public, protected 또는 private 키워드를 추가하여 수행됩니다.

public으로 정의된 클래스 멤버는 어디에서나 액세스할 수 있습니다.

protected로 정의된 클래스 멤버는 자신이 위치한 클래스의 하위 클래스와 상위 클래스에서 액세스할 수 있습니다. 접근 가능) ; private으로 정의된 클래스 멤버는 자신이 위치한 클래스에서만 접근할 수 있습니다.

PHP5에서는 다음 3가지 액세스 한정자가 지원됩니다.

(1) 공개. 이 수정자는 기본값이며, 속성이나 메서드에 대해 액세스 수정자가 지정되지 않으면

공개됩니다. 공용 속성이나 메서드는 클래스 내부와 외부 모두에서 액세스할 수 있습니다.

(2)비공개. 이 수정자는 표시된 속성이나 메서드가 클래스 내에서만 액세스될 수 있음을 나타냅니다. 에게 상속될 수 없습니다!

(3) 보호됩니다. 이 수정자는 표시된 속성이나 메서드가 클래스 내에서만 액세스될 수 있음을 나타냅니다. 상속될 수 있습니다.

Private은 동일한 클래스에서 액세스할 수 있지만 하위 클래스나 외부 클래스는 액세스할 수 없습니다.

protected는 동일한 클래스와 하위 클래스에서 액세스할 수 있지만 외부 클래스는 액세스할 수 없습니다.

클래스 멤버에 대한 액세스 제어

클래스 멤버는 public, protected 또는 private 키워드를 사용하여 정의되어야 합니다

<?php
class MyClass
{
    public $public = &#39;Public&#39;;
    protected $protected = &#39;Protected&#39;;
    private $private = &#39;Private&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = &#39;Protected2&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj2 = new MyClass2();
echo $obj->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 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
?>

메서드에 대한 액세스 제어

클래스의 메서드는 public, protected 또는 private 정의 키워드를 사용해야 합니다. 이러한 키워드가 설정되지 않은 경우 메소드는 기본 공개로 설정됩니다.

아아아아

위 내용은 php: 클래스 멤버에 대한 액세스 제어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.