올바르게 이해하면 __set()을 사용하여 공개/비공개 속성에 액세스 할 수있는 클래스 변수를 즉시 만들 수 있습니다.속성별로 유효성 검사가 다른 마법과 __set()을 사용하는 방법은 무엇입니까? (PHP)
그것은 사용하는 것 같다 :
__set($name,$value) {
$this->data[$name] = $value;
}
OR :
__set($name,$value) {
$this->$name = $value;
}
을 ... 것 안팎 쓰레기의 모든 종류의 두 결과.
개별 설정자 (변경자)를 사용하여 보호 된/개인 속성마다 1 개씩 개별 유효성 검사 컨트롤이 있지만 설정자를 많이 작성해야합니다.
매직 __set()을 활용하고 속성에 따라 유효성을 검사 할 수있는 방법이 있습니까?
예. 예를 들어
class stuff {
private $name; // alphabet, limit 10 chars
private $size; // integers 1 - 10;
private $price; // decimals 0.000 - 999.999
__set($property,$value) {
$this->$property = $value;
}
}
$thing = new stuff();
$thing->name = 1234;
$thing->size = 'b';
$thing->price = -40;
나쁜 할당을 어떻게 확인 하시겠습니까?
내가 백업 할 수있는 것보다 의견이 있지만, 나는 마술 방법을 피하려고합니다. 또한 속성에 대한 사용자 지정 논리가 필요한 경우 세터를 만들 수도 있습니다. 이는 로직에 편리한 위치를 제공합니다. – Corbin
나는 setter를 비공개로 만들고 __set()을 사용하여 액세스하고 반환 값을 얻을 수 있다고 생각했다. 그렇게하면 $ thing-> name = 1234를 사용할 수 있습니다. 여전히 개별적인 설정 기능이 있습니다. –
그래, 내가 그렇게한다면 세터를 공개적으로 남겨 둘 것이다. (그리고 다시, 나는 __set과 __get에 대해 크게 편파적이다. 그들이 제공하는 '마법'은 명시 적 문서가 없어도 외부에서 클래스의 구조를 이해하는 것을 어렵게 만든다.) – Corbin