PHP 함수는 대소 문자를 구분합니까?


100

몇 가지 코드를 파헤 치고 있었는데 mySQL_fetch_array. PHP는 함수 이름에 대해 대소 문자를 구분합니까? 나는 이것을 어딘가에서 읽었던 것을 기억하지만 그것에 대한 참조를 찾을 수없는 것 같습니다.


1
아니 그들은 아닌 것 같습니다. 환경 설정은 보통 소입니다
제이슨

3
stackoverflow.com/questions/2749781/… 중복 . 아니요, 함수는 대소 문자를 구분하지 않습니다
Bob Baddeley 2011

참고로 여기는 Note : 블록 의 중간 php.net/manual/en/functions.user-defined.php 에 묻혀 있습니다 .
마리오

3
나는 이것을 열어두기로 투표합니다. 제목이 훨씬 더 일반적이고 명시 적이므로 더 많은 사람들에게 도움이 될 것입니다.
coreyward 2011

답변:


100

나는 이것을 인용하고 있다 :

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

따라서 사용자 정의 함수가 대소 문자를 구분하지 않는 것처럼 보입니다 . PHP5에서 함수 / 객체를 대소 문자를 구분 하도록하는 투표 가있었습니다 .


3
PHP5는 이미 나왔고, 당신의 유일한 희망은 PHP6이고 나는 그들이 그 단계를 밟을 것이라고 생각하지 않습니다. 약간의 이득을 위해 많이 부서 질 것입니다.
Mark Tomlin 2011

3
@Mark Tomlin 동의하지 않습니다. 가장 좋은 방법은 매뉴얼에있는 것과 동일한 케이스를 유지하는 것이므로 명확성을 높이면서 약간 깨지는 것이 좋습니다.
Ben Dauphinee 2011

12
와. 슬프다. ImAgEcReAtEfRoMpNg ()가 코드를 난독 화하는 좋은 방법이지만 ...
Pontomedon

8
인용구가 "대소 문자를 구분하지 않음"이라고하는데 왜 "사용자 정의가 대소 문자를 구분하는 것처럼 보입니다"라고 말하는 이유는 무엇입니까? 오타 인 경우 실제로 수정해야합니다.
Barmar

11
와! 7 년의 코딩 끝에 알게되어 정말 좋습니다!
Daan

34

아니.

PHP 함수는 대소 문자를 구분 하지 않습니다 .


19

TL; DR : 클래스 이름은 대소 문자를 구분하지 않지만 항상 선언에서와 동일한 대소 문자를 사용합니다 (함수와 동일). 또한 정의 된 대소 문자가 다른 클래스를 인스턴스화하면 오토로더에 문제가 발생할 수 있습니다.


또한 클래스 이름은 대소 문자를 구분하지 않습니다.

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

결과는 다음과 같습니다.

class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}

문제는 오토로더 및 대소 문자 구분 파일 시스템 (ext2 / 3 / 4와 같은)을 사용하는 것입니다. 클래스를 포함하는 파일의 이름과 동일한 대소 문자를 사용하여 클래스 이름을 호출해야합니다 (클래스 이름의 대소 문자가 실제로 지정되지 않음). 또는 사용 strtolower:

클래스 파일 :

<?php
// filename something.php
class SomeThing {
   ...
}

오토로더 기능 ( __autoload또는 등록 할 기능 spl_autoload_register)

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

이제이 코드로 :

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

strtolower()자동 로더 코드 에 에 호출을 추가 한 경우이 작업을 수행 할 수 있습니다 (즉, 자동 로더를 사용하여 대소 문자를 구분하지 않는 클래스 이름을 갖는 것) .하지만 함수와 마찬가지로 선언 된 것과 동일한 방식으로 클래스를 참조하는 것이 좋습니다. 클래스 이름과 대소 문자가 같은 파일 이름을 가지고 있고, 자동 로더를 사용 strtolower하고, 사용을 잊어 버리십시오 .


7

아니요, 대소 문자를 구분 하지 않지만 일관성을 위해 항상 설명서에있는 대소 문자를 사용해야합니다.

그러나 변수 대소 문자를 구분합니다.


3

PHP에서 변수는 대소 문자를 구분하지만 함수는 이와 같은 문제가 없습니다. 출력을 표시하기 위해 다음 문을 사용할 수 있으며 모두 동일한 결과를 표시합니다.

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

반면에 변수의 대소 문자 구분을 변경하면 오류가 표시됩니다.

예:

<?php
$a=5;
echo $A;// It will show the error.
?>

산출:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3

2

메서드 이름도 대소 문자를 구분하지 않습니다. 예 :-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

산출:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

1

모두의 반응을 마무리 짓습니다. 비록 PHP는 PHP5에서도 지금까지 모든 경우에 문자의 경우 일관성을 필요로하지 않습니다.

모범 사례는

변수 (필수) 또는 함수 (선택 사항이지만 권장 됨)를 다시 참조 할 때 항상 동일한 경우를 사용합니다.

언젠가는 투표가 끝날지 모르고 PHP로 업데이트해야하는 몇 년 전에 만든 애플리케이션에서 케이스를 변경하는 악몽을 모두 구할 수 있습니다.

어쨌든 도움이되기를 바랍니다.


다시 "케이스 변경의 악몽을 모두 저장하십시오": 아니요, 변경 사항이 발생하면 대소 문자 구분이 php.ini에 설정된 옵션이 될 것입니다. 따라서 이전 버전과의 호환성을 유지합니다.
ToolmakerSteve

-2

너무 늦었을지도 모르지만 ...

모두가 이미 알고 있습니다. PHP 엔진은 문자의 대소 문자를 신경 쓰지 않습니다.

그리고 대다수가 "예, 저는 프로 케이스 감각입니다"라고 말하는 PHP 버그 추적기에 대한 투표가 있습니다.

하지만 내 MVC 프레임 워크에서는 컨트롤러 작업을 호출하기 때문에 반대입니다.

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ controller 및 $ action은 URL에서 그대로 가져옵니다.

사용자가 내 사이트에 대한 링크를 게시하는 경우 : https : // my-site / MyPartnerController / MyPartnerGallery

클래스 이름은 myPartnerController입니다.

이는 PHP의 클래스와 함수 이름이 대소 문자를 구분하면 아무도이 페이지를 볼 수 없음을 의미합니다.

예, 저는 항상 선언 된대로 코드의 모든 이름을 사용합니다. 그러나 나는 그들이 함수와 클래스의 이름을 대소 문자를 구분하지 않기를 바랍니다.

감사합니다!


1
정말 나쁘다 ... my-site / myLogInPage / loginsuccess 로 이동 하여 로그인 성공 기능이라고 부르는 것을 몇 가지 추측하거나 몇 가지를 지울 수 있다면 ....
Tschallacka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.