__set()의 연산 과정은 무엇입니까?
葫芦娃平衡盘
葫芦娃平衡盘 2017-08-11 22:04:09
0
2
1287

클래스 돔{
비공개 $age;
공개 함수 __construct($age){

$this->age =$age;
}
공개 함수 __set($name,$value){

if($name =='age')
               {거짓 반환;}                                                                              > ~                      . 두 경우 모두 출력 결과는 기본값 24여야 하지만

echo $obj->의 결과는 ;age=25는 25입니다. $obj->age=26; echo $obj->age; 이 문장에는 문제가 없나요?


葫芦娃平衡盘
葫芦娃平衡盘

모든 응답(2)
DayDayUp
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


입니다.
  • 회신하다 알겠습니다. 정말 감사합니다.
    葫芦娃平衡盘 작가 2017-08-12 18:18:18
DayDayUp

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;
    }


최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿