I have two classes in my system. One is called file and second is File. On my localhost when i instantiate file i get file object, but my friend running the same script gets object of File like the capital letters were unrecognized and "file" was equal to "File". Is that some configurable thing? We are both running on Windows. I have WampServer, he has XAMPP.
相关问题
- Views base64 encoded blob in HTML with PHP
- Laravel Option Select - Default Issue
- PHP Recursively File Folder Scan Sorted by Modific
- Can php detect if javascript is on or not?
- Using similar_text and strpos together
PHP is case insensitive for the class naming. it means you can normally do
$file = new file()
even if the class is namedFile
and vice-versa.Are you by any chance relying on the auto loading of class files ? If this is the case, it is possible that depending on the computer, the interpreter don't always find the same file first. This will explain the problem.
I strongly suggest that you rename your classes. It's always a bad idea to rely on case to differentiate two different things and by convention, class names always start with a capital letter.
If you can't change the class names, I suggest to have a look at php namespaces.
I guess you are using some kind of lazy loading for class files, may be you are programming in a PHP framework. The secret will lie in your
__autoload
function. Find it.Check PHP manual for Autoloading.
The following code:
Gives an error:
Cannot redeclare class File
so again, the trick might be which file is included.Behavior of your code displays that one of the classes isn't being loaded (otherwise you'll see class redeclare error). It is probably the auto loader that first loads the
file
class and then when it finds definition toFile
it simply assumes that that it has already loaded the class (due to case insensitive behavior of PHP).Classnames in PHP are not case sensitive (that doesn't depend on the operating system)
so as general advice: You shouldn't start and try to mix something there :)
Code like this should not work: