2009-05-15 3 views
1

저는 객체 지향 프로그래밍에 익숙하지 않고 PHP 응용 프로그램을위한 첫 번째 클래스 몇 개를 작성합니다.클래스를 디자인 할 때 'construct'을 올바르게 사용하십시오.

더 간단한 클래스 중 일부에서는 function __construct()을 선언하고 해당 함수 안에 특정 클래스 메서드를 호출합니다. 어떤 경우에는 클래스의 __construct()이 메서드를 호출했기 때문에 결과 객체로 아무 것도하지 않아도되는 클래스에 내 응용 프로그램의 클래스를 인스턴스화하는 것으로 나타났습니다.

이것은 나에게 맞는 것 같지 않습니다. 내가 결코 아무것도하지 않는 새로운 물건을 가지고 있다고 바보 같아 보입니다.

다시 말씀 드리지만, 이것은 제가 더 간단한 클래스 중 일부에 해당하는 경우에만 해당됩니다. 더 복잡한 클래스에서는 객체를 통해 __construct() 외부의 클래스 메소드를 사용합니다.

코딩 방법을 다시 생각해야합니까, 아니면 괜찮습니까?

답변

4

음, 생성자는 클래스의 새 인스턴스를 만들고 해당 클래스에 필요한 설정을 수행하는 데 사용됩니다. 클래스를 만들고 남겨 두는 것은 약간의 낭비처럼 보입니다. 예를 들어 클래스의 정적 함수를 조직 도구로 사용하지 않고 사용하지 않을 새 인스턴스를 만드는 대신 호출하는 함수 (또는 호출하는 함수)를 사용하지 않는 이유는 무엇입니까?

+0

젠장, 너는 나를 때려 눕히고, 나는 똑같은 것을 말하려고하고 있었다. xD –

+0

하, 그건 나에게 반복되는 문제 였어. 나는 항상 대답 할 수있는 질문에 맞는다. : P 나는 한 번 운이 좋았다. :디 – Annath

2

이것은 나에게 맞는 것 같지 않습니다. 내가 결코 아무것도하지 않는 새로운 물건을 가지고 있다고 바보 같아 보입니다.

예, 빨간색 깃발이 들립니다.

일반적으로 생성자에게 부작용이 없어야합니다. 그것들은 객체의 상태를 초기화하기위한 것이지 다른 것에 대한 것이 아닙니다. 물론이 규칙에는 예외가 있지만 일반적으로 좋은 안내선입니다. 생성자에서 무거운 계산을하지 않는 것이 좋습니다. 대신 메서드로 이동하십시오.

Side effects - 글로벌 변수 또는 정적 (클래스) 변수의 변경; 출력 (예 : print(), header() 또는 exit()); 데이터베이스 또는 다른 외부 서비스에 대한 호출 및 심지어 다른 객체의 상태로의 변경을 포함합니다.

부작용이없는 기능은 부작용이있는 기능인 절차과는 반대로 "순수한"기능이라고도합니다. 순수 함수를 프로 시저에서 명시 적으로 분리하는 것이 좋습니다 (심지어는 레이블을 지정하는 것조차도).

관련 문제