Setters/Getters, PHP의 가시성 [OOP
-
18-09-2019 - |
문제
나는 수업을 재구성하는 과정에 있습니다 (아래 참조) - 나는 수업에서 동일한 가시성으로 모든 것을 설정하는 실수를했다고 생각하는 반면, 속성은 실제로 개인이어야하며 대부분의 경우 공개되어야합니다.
속성을 잡기 위해 나는 단지 $ path-> propertyname을 수행하지만 세터/getters를 갖는 것이 더 실용적이라는 것을 알았습니다. 내가 getters를 구현하려면 각 속성마다 하나를 만들어야합니까, 아니면 전체 수업을 위해 하나를 만들 수 있습니까? 예를 들어 컨트롤러 이름을 얻고 싶다고 말합니다 ...
public function getController( ) {
return $this->controller;
}
그리고 그것은 컨트롤러 사유지를 반환 할 것입니까? 보다 일반적인 getter/setter 또는 하이브리드 방법을 갖는 것이 일반적입니까? 그리고 나를 위해 세트?
클래스 구조는 다음과 같습니다 (단지 속성/방법) :
class urlParser {
public static $url = '';
public static $controller = '';
public static $baseController = '';
public static $urls = '';
public static $template = '';
public static $captures = '';
public static $contentXML = '';
function __construct( $urls ) {
$this->urls = $urls;
$this->baseController = $urls['default'];
$this->get_url();
}
public function get_url() {
// sets following properties:
// url, template, controller, contentXML, baseController
}
}
해결책
당신에게 세터와 getter가있는 것은 무의미합니다.
컨트롤러를 반환하는 것 외에 어떤 일을 해야하는 경우, 설정 후 속성으로 아무것도하지 않으면 세터가 필요하지 않으므로 getter가 필요하지 않습니다.
실제로 getters and setters를 원한다면 모든 속성에 __get 및 __ 세트 마법 방법을 사용할 수 있습니다. 그러나 사건이 위에서 설명한대로 사건이 전혀 무의미합니다.
다른 팁
PHP의 과부하를 살펴보십시오. http://php.net/overload
두 가지 마법 방법이 있습니다 __get()
그리고 __set()
원하는 것을 정확히 할 수 있습니다
PHP 객체는 약간 좋습니다 마법 방법 (혼란스러워 질 수 있기 때문에 모두 사용하지는 않지만). 당신이 찾고있는 것은입니다 __가져 오기() 그리고 __세트(). 데이터 필드를 비공개로 만들도록 선택한 경우에도 모든 코드를 리팩터링해야합니다 (다른 코드에 잘못 액세스 할 수 없도록해야합니다.이 방법으로 수행하는 데 도움이됩니다. 유지하다.
하지만 각 필드에 대한 모든 유효성 검사를 쉽게 볼 수 있기 때문에 일반적으로 각 개인 데이터 필드에 대한 getters and setter를 사용하려고합니다. 또한 저는 PHP 개발자보다 Java 개발자가 더 많습니다.