>  기사  >  php教程  >  PHP 객체지향 2부 - 캡슐화

PHP 객체지향 2부 - 캡슐화

WBOY
WBOY원래의
2016-12-05 13:26:271185검색

1. 포장:

구체적인 콘셉트를 이야기하면 무슨 말인지 잘 모르겠는 느낌이 든다. 사실은 그냥

클래스의 멤버 속성과 멤버 메서드 앞에 public protected private과 유사한 수식자를 추가합니다

목적:접근 통제를 위해 개체의 내부 세부 정보를 최대한 숨깁니다. [접근을 거부하는 것이 아닙니다](외부 세계에 대한 장벽을 형성합니다.) , 제한된 외부 인터페이스와 외부 이벤트 연락처만 유지합니다.)

2. 캡슐화 원칙:

객체의 외부 부분은 객체의 내부 데이터(멤버 속성 및 멤버 메서드)에 마음대로 액세스할 수 없으므로 외부 오류의 "교차 감염"을 효과적으로 방지하고 소프트웨어 오류가 발생할 수 있습니다. 현지화되어 오류 확인 및 디버깅의 어려움이 크게 줄어듭니다.

3. 공개 보호 비공개 수식

공개: 공개, 기본 보호: 보호 비공개: 비공개

4. 접근 범위


해당 속성과 메소드에 접근 가능한지

         public       protected       private
类的外部           √            ×            ×
类的内部           √           √           √

①클래스 외부에서는 공용 속성과 메소드만 접근 가능합니다.

②그 외의 속성 및 메소드는 클래스 내부에 공개 메소드를 선언하여 간접적으로 접근할 수 있습니다.

③클래스 내부에서 public, private, protected 속성과 메서드에 접근할 수 있습니다.

④Private 및 protected 속성과 메서드는 클래스 내에서 접근할 수 없습니다.

멤버 메서드에 액세스 제어 문자가 없으면 기본적으로 공개되어 어디서나 액세스할 수 있습니다. (퍼블릭 메서드를 객체 외부의 액세스 인터페이스로 사용하여 내부에 간접적으로 액세스할 수 있습니다. 개체 세부 정보) .

5. 캡슐화의 몇 가지 일반적인 마법 메서드 __set(), __get(), __isset(), __unset()

이러한 매직 메소드를 소개하기 위해 먼저 생성 메소드 __construct()는 키워드로 수정되지 않고 공개 메소드입니다(구성 메소드에 대해 개인 권한을 설정하지 마십시오)사용자는 객체를 인스턴스화한 후 생성자를 사용하여 개인 속성에 초기 값을 할당할 수 있습니다.

그러나 객체를 인스턴스화했으며 프로그램이 실행되는 동안 개인 속성에 값을 할당하려고 합니다.

(1) 클래스 내부에 공용 메소드를 설정하여 할당 및 값 인터페이스를 제공합니다

class Person{
    private $name="紫藤";
    
    public function __construct(){
        echo $this->name;
    }    
    
    //赋值方法
     public function setvalue($name){
           $this->name=$name;          
     }
      public function getvalue(){
           echo $this->name;       
     }
}

//实例化
$mod = new Person();

결과는 등나무

$mod->setvalue('宝强');
$mod->getvalue();

결과는 Baoqiang

(2)매직 메소드 __set(),__get(),__isset(),__unset()

위와 같이 매번 public 메소드를 설정해야 한다면 매우 번거롭습니다. php5.1.0 이후 버전에서는 __set() 및 __get()이 미리 정의되어 있어 All non과의 페어링이 완료됩니다. -공개 속성을 획득하고 복사할 수 있습니다.

__set($propertyName,$propertyValue)

에는 속성 이름속성 값이라는 두 개의 매개 변수가 있습니다. 비공개 속성에 값을 할당하면 이 메서드가 자동으로 호출됩니다(는 클래스에서 __set())을 선언해야 한다고 나와 있습니다(나중에 코드에 추가됨)

__get($propertyName)은 비공개 속성의 값을 가져올 때 자동으로 이 메서드를 호출합니다.

비공개 속성이 존재하는지 감지하고(__isset()) 객체의 비공개 속성을 삭제합니다(__unset()).사용자가 이 두 메소드를 적극적으로 호출하지 못하도록 하려면 개인 키워드는 개체에 캡슐화되어 있습니다.

__isset($propertyName)은 비공개 속성이 존재하는지 감지합니다. (이것은 보조 감지 기능이며 감지 기능이 없습니다.) isset() 함수가 외부에서 호출되면 자동으로 호출됩니다. 방법.

__unset($propertyName)은 object_의 비공개 속성을 삭제합니다. 이 메서드는 unset() 함수가 외부에서 호출될 때만 자동으로 호출됩니다.

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