저는 PHP5에서 몇 년 동안 일해 왔으며 사이트 개발 속도를 높이기 위해 사용하는 경량 MVC 프레임 워크를 개발했습니다. 위대한 자동화 된 formbuilder, autoSQL 모듈 등이 작동합니다.
그러나 내가 개발 한 나쁜 습관 중 하나는 $ this를 쉬운 객체 매개 변수로 사용하는 것입니다. 아직 기본 클래스 (모든 사이트 변수가 정의되어 있음)에서 확장하고 setter 메서드를 사용하여 전달 된 $ this 객체로 각 객체 인스턴스를 채우지 않고도 데이터를 실제로 캡슐화하는 방법을 알아 냈습니다. 모든 것이 작동하지만 각 객체가 전체 애플리케이션 상태를 알아야한다는 것은 어리석은 일입니다. 나는 "외부"문맥에 대한 최소한의 지식 만 필요로하는 각각의 사물을 그것이 지정된 작업으로 수행하기를 바란다.
// pseudo account
Class account extends siteBase {
protected $formObj;
public $custID = 1;
public $name;
public $email;
// etc...
function __construct() {
$this->formObj = new FormBuild($this); // easy $this passing
$this->formObj->getFormData();
$this->formObj->build();
}
}
// pseudo form builder class
Class FormBuild extends siteBase {
protected $data;
function __construct($caller) {
$this->set($caller);
}
function set($arr) {
foreach($arr as $key => $val) {
$this->$key = $val;
}
}
function getFormData() {
$this->data = new FormQuery($this); // more easy $this passing
}
function build() {
foreach($this->data as $key => $val) {
echo $key . " " . $val . "<br>";
}
}
}
Class FormQuery extends siteBase {
function __construct($caller) {
$this->set($caller);
}
function query() {
$sql = "SELECT email, phone FROM account WHERE custID = '$this->custID'";
// query & return return result, etc.
}
}
는 무엇 "프로는"상황이해야합니까 : 예를 들어
,의 내가 고객의 계정 정보를 생성하는 클래스가 있다고 가정 해 보자? 인터페이스를 약간 정리하고 싶습니다 ...
레지스트리가 작동 할 수 있지만, 좋은 생각입니다.내가 제공 한 예제는 실제로 다루는 대상을 다루지 않습니다. 컨트롤러는 필요에 따라 formBuilder 객체를 호출하여 요청을 처리하는 대상 클래스 (URI의 조회)를 호출합니다.이 객체 자체는 formQuery 객체를 호출하여 DB를 가져옵니다. 저장된 양식 필드 데이터). 그런 다음 컨트롤러는 컴파일 된 컨텐트를 취하여 표시 할 뷰 객체로 전송합니다. formBuild 객체를 재구성해야하므로 최소한 객체 속성을 호출해야합니다. formBuilder 및 formQuery 객체에 대한 레지스트리 배열 매개 변수를 전달하고 $ this 통과 습관에서 벗어날 수 있습니다. -) – virtualeyes