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.