2011-03-10 2 views
18

내 시스템에는 두 개의 클래스가 있습니다. 하나는 file이고 두 번째는 File입니다. 내 localhost에서 파일을 인스턴스화 할 때 파일 객체를 가져 오지만 같은 스크립트를 실행하는 내 친구가 대/소문자가 인식되지 않고 "파일"이 "파일"과 같은 File 객체를 가져옵니다. 구성 가능한 부분입니까? 우리는 모두 Windows에서 실행됩니다. 나는 WampServer를 가지고있다. 그는 XAMPP를 가지고있다. PHP에서클래스 이름의 대문자 PHP

+11

같은 이름을 섞어서는 안됩니다. – JamesHalsall

답변

14

클래스 이름 (즉 운영체제에 의존하지 않는다) 대소 문자를 구분하지 않습니다

class myclass {} 

$x = new MYclaSS; 

var_dump($x); 

object(myclass)#1 (0) { 
} 

그래서 일반적인 조언 등 : 당신은 시작 :

뭔가를 혼합하려고해서는 안 이 같은

코드해야 하지 일 :

class ab {} 

class AB {} 

Fatal error: Cannot redeclare class AB in ... on line x 
+0

그 이유는 그가 클래스와 친구를 같은 코드로로드하는 이유를 설명하지 않습니다. – krtek

+0

당신이 옳습니다. 하나의 스크립트에서 두 클래스 ("file"및 "file")가 필요할 경우이 코드가 모두 함께 작동하지 않아야한다는 대답을 펼쳤습니다. 하지만 제공된 정보로는 그가 경험하고있는 것을 짐작할 수 없습니다. 전혀 작동하지 않아야한다는 것을 보여줍니다. – edorian

+0

클래스 로더가 사용되면 동일한 클래스 이름을 가진 두 개의 파일을 가질 수 있습니다. 클래스 로더에 따라 작동 할 수 있습니다.하지만 이것은 단지 큰 문제로 이어질 수 있습니다;) – krtek

41

PHP는 클래스 이름에 대한 대소 문자를 구분합니다. 즉, 클래스 이름이 File이고 그 반대 인 경우에도 일반적으로 $file = new file()을 수행 할 수 있음을 의미합니다.

혹시 클래스 파일 자동로드에 의존하십니까? 이 경우 컴퓨터에 따라 인터프리터가 항상 동일한 파일을 먼저 찾지 않을 수도 있습니다. 이것은 문제를 설명 할 것입니다.

수업 이름을 바꾸는 것이 좋습니다. 서로 다른 두 가지를 구별하기 위해 대소 문자를 사용하는 것은 좋지 않습니다. 클래스 이름은 항상 대문자로 시작합니다.

클래스 이름을 변경할 수 없다면 php namespaces을 살펴 보시기 바랍니다.

+1

대소 문자를 구별하는 파일 시스템의 오토로더는 다른 경우에 당신의 클래스를 찾을 수 없습니다. –

+0

수업은 대문자로 시작하지 않습니다 ... 절대로하지 마십시오 – dsdsdsdsd

+1

@dsdsdsdsd - Y, 왜 기본적으로 모든 표준을 준수합니까? –

1

클래스 파일 용으로 지연로드을 사용하고 계신지 모르지만 PHP 프레임 워크에서 프로그래밍 중일 수 있습니다. 비밀은 __autoload 기능에 있습니다. 그것을 찾아라.

체크 PHP manual for Autoloading.

다음 코드 : Cannot redeclare class File 그래서 다시, 트릭 포함되어있는 파일이 될 수 있습니다

<?php 

class file { 
    public $a; 
} 

class File { 
    public $a2; 
} 

$x = new file(); 

오류를 제공합니다.

코드의 동작에 따라 클래스 중 하나가로드되지 않는 것으로 표시됩니다. 그렇지 않으면 클래스 재 선언 오류이 표시됩니다. 아마도 file 클래스를로드 한 후 File에 정의를 찾으면 자동으로 로더가됩니다 (PHP의 대소 문자를 구별하지 않으므로 클래스를 이미로드했다고 가정합니다).

관련 문제