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

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

function ag()
{
    echo '2';
}

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

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

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



답변

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

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

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

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


답변

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

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

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


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

함수의 경우 ( 따옴표 ) :

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

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

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

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

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


답변