코드는 다음과 같습니다.
/*
* 캡슐화: 객체지향의 세 가지 주요 특징 중 하나
*
* 1. 멤버(속성, 메서드)를 독립적인 동일한 단위로 캡슐화하고 개체의 내부 세부 정보를 최대한 숨깁니다.
* 액세스 권한 수정자 public protected private
* private: private, 이 키워드로 수정된 멤버는 가능 객체에서만 사용됩니다. 내부 액세스($this로만 액세스)
*
* 속성은 캡슐화할 수 있습니다:
* 변수를 여러 메서드에서 사용해야 하는 한 이 변수를 이 객체에서 직접 사용할 수 있는 멤버 속성
*
* 멤버 속성은 이 객체의 모든 메서드에 사용되며, 이는 이 개체의 전역 변수와 동일합니다. 객체의 기능 변경
*
* 멤버 속성의 값이 비정상이면 메소드에 의해 실행되는 함수가 정상적이지 않음
*
* 기능 : 객체를 추가할 필요 없음 외부에서 해당 값을 변경하거나 읽습니다
* 1.
*을 캡슐화하고 공용 메서드를 제공합니다(해당 메서드를 통해 개체 구성원 속성의 할당 및 값 획득을 제어할 수 있습니다)
*
*
* 메소드는 캡슐화할 수도 있습니다
*
* 기능:
* 1. 내부에서만 사용할 수 있도록 private 수정을 사용합니다
*
* 2. 100가지 메소드가 있습니다 95개(나머지 5개를 제공하는 메소드)를 캡슐화하는 클래스에서는 5개의 메소드만 사용할 수 있습니다.
*
* 100개의 멤버 속성은 모두 값을 가질 수 있으며 변경할 수 없습니다. 값을 변경할 수 있음, 값을 얻을 수 없음 //이 경우에는 다음 방법을 사용하는 것이 더 편리합니다
* 캡슐화 관련 Magic 방법:
*
* __set(); //[private] 멤버 속성값을 직접 설정할 때 자동으로 호출되는 메소드
* __get();//[private] 멤버 속성값을 직접 얻을 때 자동으로 호출되는 메소드입니다
* __isset( );//객체를 보기 위해 isset()을 직접 사용합니다. 이 메소드는 비공개 속성이 존재할 때 자동으로 호출됩니다.
* __unset();//이 메소드는 비공개 속성을 삭제하기 위해 unset()을 직접 사용할 때 자동으로 호출됩니다. 객체
*
*
*
*
*
*
*
*/
class Person{
//x는 멤버 속성을 캡슐화합니다. 객체 외부에서 변경할 필요가 없습니다.
private $age
private __unset($proName){
unset($this-> ;$proName);
}
//직접 뷰 객체입니다. private 속성이 존재할 때 자동으로 호출되는 메소드입니다.
//__isset($proName)의 사용법, $proName은 속성 이름을 나타냅니다. 🎜>비공개 함수 __isset($proName){
return isset($this-> ;$proName);//isset()는 존재 여부를 반환합니다.
}
function __construct($name,$age, $sex){
$this->name=$name;
$ this->age=$age
$this->sex=$sex; //비공개 멤버 속성을 얻을 때 이 메서드는 자동으로 호출됩니다.
비공개 함수 __get( $proName)
{
//얻은 값 제어
if($proName=="age"){
if($this-age>40)
return $this- >age-10
}
return $this->$proName;
}
// 비공개 멤버 속성을 설정할 때 이 메서드는 자동으로 호출됩니다.
private function __set( $proName,$proValue){
//$proName은 멤버 속성 이름을 나타내고, $proValue는 멤버 속성 값을 나타냅니다.
// 설정 범위 제어
if($proName=="age"){
if($proValue > 100 || $proValue<0)
return;
}
$this- >$proName=$proValue;
}
//회원 속성 값 설정을 위한 공개 메소드 제공
function setAge($age){
//연령 범위 제어 및 보안 강화
if($age > 100 || $age < 0 )
return;
$this->age=$age
} //얻을 수 있는 공개 메소드 제공 멤버 속성 값
function getAge(){
//나이 범위 제어
if($this->age < 30)
return $this->age
else if($this->age<40)
return $this->age -5
else if($this->age<50)
return $this-> ;age
else
return $this->age-15;
제공된 Public 메서드}
function say(){
echo "내 이름: {$this-> name}, 내 나이: {$this->age}, 내 성: {$ this->sex}
";
//캡슐화된 run() 메서드에 액세스
$this- run();
}
비공개 함수 run(){
echo '111111111111
'
}
function eat(){
}
//파괴자 메서드
function __destruct(){
}
}
$p1=new Person("zhangsan",25,"male")
$p2=new Person; =새 사람
//$p1->age=-50;//age는 외부에서 마음대로 접근할 수 있으므로 보안을 위해 멤버 속성을 캡슐화합니다.
$p1->setAge(30);//
$p1->getAge() 메소드를 통해 구성원 속성 값을 설정합니다.//
메소드를 통해 구성원 속성 값을 가져옵니다.// 매직 메소드 __set($proName,$proValue) __get($proName)을 추가하면 멤버 속성
$p1->say();//
$p1->를 호출할 수 있습니다. run();//Private 메소드는 직접 호출할 수 없습니다.
//$p1에서 이름을 삭제합니다.
unset($p1->name)
//이름이 존재하는지 확인합니다.
if (isset($p1->name)){
echo "존재합니다
";
}else{
echo "해당 멤버가 없습니다
"
} >?>