PHP의 함수와 메소드가 대소 문자를 구분하지 않는 이유는 무엇입니까?


107

PHP의 함수와 메소드는 다음 예제에 설명 된대로 대소 문자를 구분하지 않습니다.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

그러나 그것은 변수의 경우가 아닙니다. 그 이유는 무엇입니까?


161
PHP는 악취가 나는 이유가 필요하지 않습니다!
Max Shawabkeh

2
"수프 남자가 그렇게 말 하니까." 근거는 없지만 참조 : php.net/manual/en/functions.user-defined.php (예제 3과 4 사이), php.net/manual/en/language.variables.basics.php
2010 년

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");함수 share ($ str)에 대한 두 번의 호출을보고 놀랄 수 있습니다. 첫 번째는 c'tor 때문에 두 번째는 같은 이유로 명시적인 호출 !!
vivek.m

1
@outis, "수프 맨"이 무슨 뜻이야?
Pacerier 2014 년

1
@outis, 당신은 Seinfeld의 "Soup Nazi"를 언급하고 있습니다. YouTube , Wikipedia
Kevin Traas

답변:


98

인터뷰 에서 인용하겠습니다 – PHP의 작성자 Rasmus Lerdorf

PHP의 첫 번째 버전은 내 웹 사이트와 몇 가지 프로젝트를 위해 조합 한 간단한 도구 세트였습니다. 한 도구는 mSQL 데이터베이스에 멋진 적중 로깅을 수행하고 다른 도구는 양식 데이터 해석기 역할을했습니다. 저는 C로 작성된 약 30 개의 서로 다른 작은 CGI 프로그램으로 끝났고, 그것들을 모두 하나의 C 라이브러리로 결합했습니다. 그런 다음 HTML 파일에서 태그를 선택하고 C 라이브러리에있는 해당 함수의 출력으로 대체하는 매우 간단한 파서를 작성했습니다.

간단한 파서는 조건부 태그, 루프 태그, 함수 등을 포함하도록 천천히 성장했습니다. 어느 시점에서도 스크립팅 언어를 작성하고 있다고 생각하지 않았습니다. 나는 단순히 매크로 대체 파서에 약간의 기능을 추가하고있었습니다. 나는 여전히 모든 실제 비즈니스 로직을 C로 작성하고있었습니다.

필자는 도입 된 모든 함수가 본질적으로 HTML 문서의 태그처럼 느껴졌고 HTML 태그가 대소 문자를 구분하지 않았기 때문에 대소 문자를 구분하지 않기 위해 PHP에서 함수 이름을 선택했다고 어딘가에서 읽었습니다. 나중에이 기능은 언어로 유지되었습니다.


66
또한 파리에서 열린 PHP 컨퍼런스에서 Rasmus의 인용문을 기억합니다. "엄격한 코딩 규칙이나 표준을 따르는면에서 저는 확실히 좋은 프로그래머는 아니지만 하나의 기능 이름을 다른 이름에서 인식하면 심각한 문제가 발생합니다! "
Tom Desp 2012

1
앞으로도 대소 문자를 구분하지 않습니까?
V 시리즈

4
그래서 PHP 프로그래머는 함수 이름을 지정할 때 camelcase 대신 밑줄을 사용합니다.
paperstreet7 2014 년

2
@ paperstreet7 일부는 그렇습니다. 좋은 사람은 그렇지 않습니다. 적어도 더 이상은 아닙니다.
Dan

13
@dan, 많은 "좋은"프로그래머가 밑줄을 사용합니다. 사실, PSR-0은 의도적으로 권장하지 않습니다. 좋은 프로그래머는 밑줄이나 카멜 케이스를 고르고 그 규칙을 고수합니다. 그 선택을 누군가가 좋은 프로그래머인지의 척도로 만드는 것은 꽤 어리석은 짓입니다.
jdp 2015

34

예, 함수와 메소드 이름은 대소 문자를 구분하지 않습니다.

예, 변수 이름은 대소 문자를 구분합니다.

그 이유가 있는지 잘 모르겠습니다. 오랫동안 이런 식으로 사용되어 왔고 이전 버전과의 호환성 때문에 여전히 그렇습니다.



참고로, 매뉴얼의 여러 페이지에 대한 몇 가지 링크 / 인용문 :

함수의 경우 ( 따옴표 ) :

참고 : 함수 이름은 대소 문자를 구분하지 않지만 일반적으로 선언에 나타나는대로 함수를 호출하는 것이 좋은 형식입니다.

메서드는 객체의 함수에 지나지 않습니다. 특히 PHP 4와 이전 버전과의 호환성을 생각할 때 그렇습니다.


그리고 변수 ( 따옴표 )의 경우 :

PHP의 변수는 달러 기호와 변수 이름으로 표시됩니다. 변수 이름은 대소 문자를 구분합니다.

객체 속성은 객체의 변수에 지나지 않습니다. PHP 4 및 이전 버전과의 호환성에 대한 동일한 설명입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.