2011-03-10 68 views
18

我在我的系統中有兩個類。一個叫做文件,第二個是文件。 在我的本地主機上,當我實例化文件我得到文件對象,但我的朋友運行相同的腳本獲取文件的對象像大寫字母無法識別和「文件」等於「文件」。 這是一些可配置的東西?我們都在Windows上運行。我有WampServer,他有XAMPP。類名中的大寫字母PHP

+11

你真的不應該混合這樣的名字 – JamesHalsall 2011-03-10 13:21:19

回答

14

類名在PHP不區分大小寫(即不依賴於操作系統)

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 2011-03-10 13:27:05

+0

你是對的。擴展答案以顯示如果在一個腳本中需要兩個類(「file」和「File」),那麼這樣的代碼不應該一起工作。但是提供的信息我無法猜測他正在體驗什麼,只是表明它根本不應該工作 – edorian 2011-03-10 13:33:18

+0

如果使用類加載器,則可以使用兩個具有相同類名的文件,取決於類加載器,它可以工作。但是這隻能導致巨大的問題;) – krtek 2011-03-10 13:42:11

41

PHP是區分該類命名不敏感。這意味着即使您的課程名稱爲File,反之亦然,您通常也可以執行$file = new file()

你是否依靠自動加載類文件?如果是這種情況,根據計算機的不同,解釋器並不總是先找到相同的文件。這將解釋這個問題。

我強烈建議你重命名你的類。依靠大小寫來區分兩種不同的東西總是一個壞主意,按照慣例,類名始終以大寫字母開頭。

如果你不能改變類名,我建議看看php namespaces

+1

但是區分大小寫的文件系統上的自動加載器不會在不同的情況下找到您拼寫的類。 – 2016-01-18 14:06:18

+0

我的課程不以大寫字母開頭...從來沒有,永遠不會開始 – dsdsdsdsd 2016-03-29 02:06:00

+1

@dsdsdsdsd - Y,爲什麼基本符合所有標準? – 2018-01-25 05:52:40

1

我猜你正在使用某種懶加載作爲類文件,可能是你在編寫PHP框架。祕密在於你的__autoload功能。找到它。

檢查PHP manual for Autoloading

下面的代碼:

<?php 

class file { 
    public $a; 
} 

class File { 
    public $a2; 
} 

$x = new file(); 

給出了一個錯誤:Cannot redeclare class File如此反覆,關鍵可能是哪個文件是包括

你的代碼的行爲顯示其中一個類沒有被加載(否則你會看到類的redeclare錯誤)。它可能是首先加載file類的自動加載器,然後當它發現定義爲File時,它只是假定它已經加載了該類(由於PHP的大小寫不敏感行爲)。