2017-09-13 17 views
0

__construct()가 무엇인지 이해할 수 없습니다. I이 두 예 사이의 차이를 볼 수두 클래스 간의 차이점 __construct()

1)

class Person { 

public function __construct($person) { 
    echo $person; 
} 

$person = new Person('Name'); 

2) 본 예에서는 인위적인

class Person { 
    public function name($name) { 
     echo $name; 
    } 
} 

$person = new Person(); 
$person->name('Name'); 
+3

매뉴얼 : [생성자 및 소멸자] (http://php.net/manual/en/language.oop5.decon.php) –

+1

생성자는 단순히 객체 생성시 첫 번째 및 필수 동작을 정의합니다. – Kazz

+0

차이점을 볼 수 없습니까?! 하나는 생성시에 인수를 전달하고 다른 하나는 나중에 다른 인스턴스 메소드에 전달합니다. 꽤 명확한 차이는 IMO. 왜 그렇게 다르지 않다고 생각하는지 분명히하고 싶을 수도 있습니다. – deceze

답변

2

귀하의 두 가지 사례는 실제로 동일하지만, (당신, 현재, 현재) 관점에서만 볼 수 있습니다. 이 예에서

class Person { // First case : using the constructor 

    public function __construct($person) { 
     echo $person; 
    } 
} 

// ---------------------------------------------------------------- 
$person = new Person('Name'); 


, 당신은 매우 명확 클래스 Person (또는 그 서브 클래스 중 하나) 의 각각의 모든 개체가 즉시이 생성 될 때 이름을 부여해야합니다. 언제든지 이름이없는 Person은 없습니다. 그것은 한 가지 또는 다른 방식으로 코드를 공유하는 경우 자신에게 부과하기로 선택한 디자인 제약 사항입니다 (클래스 Person의 객체를 만들려는 경우). 이 제약 조건을 위반하면 PHP는 명시 적 오류/경고 메시지와 함께 중단됩니다. (데모 : https://3v4l.org/hCXZ8는)


class Person { // Second case : no constructor (equivalent to an empty constructor) 

    public function name($name) { 
     echo $name; 
    } 
} 

// ---------------------------------------------------------------- 
$person = new Person(); 
$person->name('Name'); 

이 다른 짐승이다 : 당신은 클래스 Person의 개체를 만들 수 있습니다, 당신은 이름을 표시 할 수 있습니다. Person을 만들 수도 있고 이름을 전혀 표시 할 수도 없습니다. 어떤 이유로 든 클래스 코드에 눈을 띄지 않으면 실제로는 알 수 없을 수도 있습니다 (각 클래스에 고유 한 파일을 제공하는 것이 일반적입니다). 두 예에서


나는이 두 개의 서로 다른 관점은 (그들도 서로 통신 할 수있는 두 종류의 사람이 될 수 있다고 생각) 때문에, 클래스 선언 및 사용과 주석 행을 끌었다. 클래스 작성자는 제약 조건을 생성 할 수있는 가장 명확한 코드로 정확하게 변환합니다. 클래스 사용자는 사용하는 클래스의 복잡성을 이해하는 데 시간을 낭비하고 싶지 않습니다. 최소한의 복잡도로 객체를 만들고, 최소한의 오버 헤드와 학습 곡선으로 기능을 활용하고 코드로 작업하기를 원합니다. 및 비즈니스.

4

번째 미세하다.

name이 echos라는 방법 대신 클래스 필드 인 경우 어떻게됩니까? 명시 적으로 설정하기 전에 어떤 가치가 있습니까?

개체가 사용되기 전에 필드가 초기화되고 설정이 완료되도록하려면 생성자를 사용하십시오. 초기화가 필요하지 않은 경우 명시 적 생성자를 작성할 필요는 없습니다.

+0

좋아요. 이제 이해합니다. 나는 생각합니다 ....하지만 당신이 그것을 더 잘 이해할 수있는 작은 모범을 쓰고 싶다면. 대단히 고마워! –

+0

@ ΜάνοςΑρβανίτης 나는 잠시 후에 PHP를 작성하지 않았으므로 코드를 작성하는 것을 피하려고했다. 나는 상황을 더 혼란시키기 위해 내가 소개 한 어떤 실수도 원하지 않을 것이다. 얼마나 많이 당신이 객체의 사용과 창조를 연구 했습니까? 방금 시작한 경우 생성자의 목적이 명확하지 않을 수 있습니다. 더 복잡한 객체를 작성하자마자 더 명확 해집니다. 게시 한 예제의 문제점은 처음에 클래스를 사용할 때 아무런 문제가 없다는 것입니다. 이 방법은 맨손 기능 일 수도 있습니다. – Carcigenicate

+0

처음부터 클래스를 잘못 사용하는 코드의 클래스 조작에 대한 결론을 내리는 것은 쓸모가 없습니다. – Carcigenicate