클래스 돔{
비공개 $age;
공개 함수 __construct($age){
$this->age =$age;
}
공개 함수 __set($name,$value){
if($name =='age')
{거짓 반환;} > ~ . 두 경우 모두 출력 결과는 기본값 24여야 하지만
DayDayUp2017-08-12 16:38:41
class demo{ private $age; public function __construct($age){ $this->age =$age; } public function __set($name,$value){ if($name =='age'){ return false; } return $this->$name=$value; } } $obj =new demo(24); echo $obj->age=25; $obj->age=26; echo $obj->age;
귀하의 코드에서는 두 번째 에코가 실행되어서는 안 됩니다. 전체 코드를 게시하지 않은 이유는 개인 속성에 액세스할 수 없다는 메시지가 표시되기 때문입니다.
두 출력 결과의 차이점은 작성 방식 때문입니다. echo, echo a = 3 이렇게 작성하면 할당문이 실행되지만 할당 성공 여부에 관계없이 등호 오른쪽의 숫자가 화면에 출력됩니다
1. >age=25; set 메소드를 실행하면 name이 age와 동일하다는 것을 확인하고 false를 반환하므로 age 속성 값은 수정되지 않습니다. 하지만 여러분이 쓰는 방식으로는 화면의 등호 오른쪽에 25가 출력됩니다.
2. 두 번째 방법은 할당문을 실행한 다음 false를 반환하는 일반적인 방식입니다. , age 값을 수정하지 않고 출력하면 age 속성 값이 여전히 24
DayDayUp2017-08-12 16:00:34
echo $obj->age=25 이 문장은 잘못되었습니다. 클래스의 값을 변경하지 않았습니다.
1. 설정 방법에 문제가 있는 것 같습니다. else 문이 빠진 것 같습니다
2. 비공개 속성을 읽으려면 다른 get 메소드를 작성해야 합니다
if($name =='age') {return false;} //没有else return $this->$name=$value; } } //正确代码 public function __set($name,$value){ if($name == 'age'){ echo 'age不允许修改'; }else{ return $this->$name = $value; } } public function __Get($name){ return $this->$name; }