IT 관련/기타

[PHP]생성자 사용시 주의 - 실수경험

nullzone 2017. 12. 16.
반응형

프로그램에서 OO(Object Oriend)의 개념은 일상화 되면서, Class 단위의 프로그램 구조를 이용한다.


PHP 로 프로그램을 할때, 고생했던 경험이 있어 여기 소개 한다.

클래스를 생성시 호출이 2번되던 경험이 있어서 고생했던 기억이 있다.


Java의 경우 생성자는 클래스 명과 동일한 함수를 생성자로 인식한다.

반면 PHP 의 경우 엄연히 __construct() 라는 생성자가 있다 그럼에도 불구 하고,  class 명과 동일한 함수명이 존재 하면 이를 생성자 처럼 실행한다.

물론 PHP 에서 근본적인 문제는 class 생성은 new classs 또는  new classname()  로 생성이 되는게 문제로 보인다.

아무튼 아래 코드를 보면 이해가 쉬울거라 생각한다.


PHP

class 생성자  __construct()



<?php
$test = new Sample;

class Sample{
    public function __construct() {
       print "SampleClass constructor: __construct\n";
   }
}




<?php
$test = new Sample;

class Sample {
    public function __construct() {
        print "SampleClass constructor: __construct\n";
    }
}



문제가 없다.

그러나, 아래 코드는?


<?php
$test = new Sample;

class Sample {
    public function __construct() {
        print "SampleClass constructor: __construct\n";
    }

    public function Sample() {
        print "SampleClass constructor: Sample\n";
    }
}

<?php

$test = new Sample();
 
class Sample {
    public function __construct() {
        print "SampleClass constructor: __construct\n";
    }
 
    public function Sample() {
        print "SampleClass constructor: Sample\n";
    }
}


SampleClass constructor: __construct

SampleClass constructor: Sample


문제는 class name 과 해당 클래스에 동일한 fuction이 있다면…

이를 생성자로 인식해 버린다.


그러나 아래 코드는 에러다.

이문제는 PHP 의 경우 windows와 Linux지원으로 인해서 대소문자 구분에 따른 문제이다.


<?php

lass Sample {
    public function Sample() {
        print "SampleClass constructor: Sample\n";
    }

    public function sample() {
        print "SampleClass constructor: sample\n";
    }

}


결론적으로 PHP 에서 class name 과 동일한 function은 만들지 말아야 하며, 대소문자 역시 구분을 두지 않는다고, 생각하는 것이 바람직하다고 생각한다.




반응형

'IT 관련 > 기타' 카테고리의 다른 글

cmd 보다는 Cmder 사용해 보자  (5) 2017.12.17

댓글