2011-03-10 17 views
18

Tengo dos clases en mi sistema. Uno se llama archivo y el segundo es Archivo. En mi servidor local cuando instalo un archivo recibo un objeto de archivo, pero mi amigo que ejecuta el mismo script obtiene el objeto de File como si las letras mayúsculas no se reconocieran y "file" fuera igual a "File". ¿Es eso algo configurable? Ambos estamos corriendo en Windows. Tengo WampServer, él tiene XAMPP.Mayúsculas en el nombre de clase PHP

+11

realmente no debería mezclar nombres como ese – JamesHalsall

Respuesta

14

nombres de las clases en PHP no distinguen entre mayúsculas y minúsculas (que no depende del sistema operativo)

class myclass {} 

$x = new MYclaSS; 

var_dump($x); 

object(myclass)#1 (0) { 
} 

así como consejos generales: No se debe iniciar y tratar de mezclar algo allí :)

Código como este debería no trabajo:

class ab {} 

class AB {} 

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

Eso no explica por qué está cargando una clase y su amigo otro con el mismo código. – krtek

+0

Tienes razón. Se amplió la respuesta para mostrar que un código como este no debería funcionar en conjunto si las dos clases ("archivo" y "Archivo") fueran necesarias en un script. Pero con la información provista no puedo adivinar lo que está experimentando, solo demuéstrele que no se supone que funcione en absoluto. – edorian

+0

Es posible si se usa un cargador de clases, puede tener dos archivos con el mismo nombre de clase dentro y dependiendo del cargador de clases, puede funcionar.Pero esto solo puede ocasionar grandes problemas;) – krtek

41

PHP es sensible a mayúsculas para la denominación de clase. significa que normalmente puede hacer $file = new file() incluso si la clase se llama File y viceversa.

¿Está usted por casualidad confiando en la carga automática de archivos de clase? Si este es el caso, es posible que dependiendo de la computadora, el intérprete no siempre encuentre el mismo archivo primero. Esto explicará el problema.

Le sugiero encarecidamente que cambie el nombre de sus clases. Siempre es una mala idea confiar en el caso para diferenciar dos cosas diferentes y, por convención, los nombres de las clases siempre comienzan con una letra mayúscula.

Si no puede cambiar los nombres de clase, sugiero echar un vistazo a php namespaces.

+1

Pero los cargadores automáticos en sistemas de archivos sensibles a mayúsculas y minúsculas no encontrarán sus clases escritas en casos diferentes. –

+0

mis clases no comienzan con letras mayúsculas ... nunca lo han hecho, nunca lo harán – dsdsdsdsd

+1

@dsdsdsdsd - S, ¿por qué cumplen básicamente todos los estándares? –

1

Supongo que está utilizando algún tipo de cargando lazy para archivos de clase, puede estar programando en un marco de PHP. El secreto estará en la función __autoload. Encuéntralo.

Compruebe PHP manual for Autoloading.

El siguiente código:

<?php 

class file { 
    public $a; 
} 

class File { 
    public $a2; 
} 

$x = new file(); 

da un error: Cannot redeclare class File así que de nuevo, el truco puede haber en el archivo será incluido .

El comportamiento de su código muestra que una de las clases no se está cargando (de lo contrario, verá error de redeclaración de clase). Probablemente es el cargador automático que primero carga la clase file y luego, cuando encuentra la definición a File, simplemente asume que ya ha cargado la clase (debido al comportamiento insensible a las mayúsculas y minúsculas de PHP).

Cuestiones relacionadas