2011-08-28 2 views
0

그래서 현재 SQL에있는 테이블이 다른 테이블을 연결하는 테이블과 함께 있습니다. MySQL과 상호 작용하는 좋은 방법은 무엇입니까?

Table1: id, identifier, other_attributes 
Table2: id, identifier, other_attributes 
Table3: id, table1_id, table2_id // this connects table 1 and 2. 

그래서 나는 $table = new table1($id);$table->getName(); 또는 $table->setName(); 그러나

같은 것들을 허용, 표 1 및 표 2에 대한 객체를 만들어, 나는 아니에요이 최선의 방법 인 경우 확신? 그리고 그렇다면 table3을위한 다른 객체를 만드는 것이 가장 좋을까요? 아니면 이것을하는 더 좋은 방법이 있습니까?

마지막으로 getter와 setters를 결합하면 $table->name('somename');이 이름을 설정하고 $table->name();은 그 이름을 가져옵니다. 그들을 결합하는 것이 현명합니까? 그들을 분리하는 것이 더 나은가? 당신이했던 것처럼

호쉬

답변

1

저는 실제로 사용 된 각 개체에 대해 개체를 사용합니다 (이름이 어떻게 든 ... ...).

예를 들어 세 가지 다른 DB 테이블의 데이터를 사용하는 단일 사용자 클래스가 있습니다. n : m 관계 테이블은 이름에서 알 수 있듯이 구현되어야합니다. 테이블 'user_has_address'가 있으면 SQL-queries를 사용자 클래스에도 구현할 수 있습니다 (Address 클래스를 사용함). 그러나 'company_has_employees'와 같은 테이블의 데이터는 회사 클래스에 상주합니다.

getter 및 setter의 이름을 지정하는 방법 (PHP의 경우)은 코딩 규칙에 따라 다릅니다 (예 : 회사 또는 사용자 자신). magic-methods (예 : __call())를 사용할 때 PHP에서는 이들이 전혀 필요하지 않지만 @JJ에서 언급했듯이 테스트가 더 쉬울 것입니다.

+0

__set() 및 __get()을 사용하는 Ahh는 getter 및 setter를 대체하는 아이디어처럼 들리지만 나머지 코드도 더 깔끔하게 정리할 수 있습니다. 관계에 대한 정보를 보내 주셔서 감사합니다. –

+0

IDE에서 자동 완성 기능을 사용할 수 없기 때문에 마술 메서드를 더 많이 사용하지 않을 것입니다. 즉, 시간을 낭비하고 오류가 발생하기 쉽습니다. 또한 PHPDoc에서 제공 할 수있는 정확한 반환 유형/값 (예 : "정수 또는 -1")에 대해 확신 할 수 없습니다. – str

+0

@str "정확한 반환 유형에 대해 확신 할 수 없습니다."요구 사항 인 경우 PHP와 같은 형식이 지정되지 않은 언어를 사용하지 말고 예를 들어 Java에 충실하십시오. – feeela

1

나는이 구현 된 경우에, 나는 세터와 게터로 name('somename')name()을 사용하지 않을 것입니다. 그것은 내 생각에 함수를 쉽게 기억할 수있게하지만 코딩 실수를 쉽게 찾아 낼 수 있습니다. 사실 .name ('')을 의미 할 때 실수로 .name()을 입력 할 수 있으며 코드에서 이러한 오류를 찾는 것이 어려울 수 있습니다.

나는 .getName().setName('somename') 나 혼자 갈 것입니다. 어쩌면 내가 편향되어 있을지도 모른다. 나는 강력한 자바 배경을 가지고있다.

+0

자바를 사용하기 전에 PHP를 알았지 만 실제로는 자바 때문에 클래스를 사용하는 법을 배웠습니다. 원래 각 필드에 대해 하나의 getter와 setter가 있었지만 그게 너무 까다 롭다고 생각했지만 , 나는 마술 방법을 사용할 것이다. –

+0

필자는 whats가 말했던 것에 동의합니다. (또한 setter/getters가 IDE에 의해 생성 될 수 있기 때문에 매우 유용합니다.) 그러나 모든 경우에 반드시 필요한 것은 아닙니다. 예를 들어 jQuery는 Hosh Sadiq이 처음 사용했던 것과 정확히 일치합니다. 가져 오기 및 설정 방법은 [jQuery.val()] (http://api.jquery.com/val/)을 참조하십시오. – feeela

1

getName() 및 setName()도 강력히 권장합니다. 이유는 간단합니다 : 좋은 IDE는 타이핑 작업을 피할 수 있습니다.

는 예를 들어, 당신은 입력 :

$name = 'str'; 
$table->setN 

다음 코드 완성이 찰 수있는이 $ 테이블 ->에서는 setName ($ 이름)가 발생할 수 있습니다. 이름 ($ name = null) 메소드 만있는 경우 IDE는 인수를 제안할지 여부를 확신 할 수 없습니다. 또한 veeeery 코드를 이해하는 데 도움이되는 setX()/getX()를 사용하는 것이 일반적입니다.

관련 문제