프로그램에서 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 |
---|
댓글