¿Las funciones PHP distinguen entre mayúsculas y minúsculas?


100

Estaba buscando en un código y encontré algunas llamadas a mySQL_fetch_array. ¿PHP distingue entre mayúsculas y minúsculas sobre los nombres de las funciones? Recuerdo haber leído esto en alguna parte, pero parece que no puedo encontrar ninguna referencia al mismo.


1
No, no parece que lo sean. la preferencia suele ser minúscula
Jason

3
Duplicado de stackoverflow.com/questions/2749781/… . No, las funciones no distinguen entre mayúsculas y minúsculas
Bob Baddeley

Como referencia: está enterrado aquí en el medio php.net/manual/en/functions.user-defined.php en un bloque Note : .
mario

3
Voto para dejar esto abierto: el título es mucho más general y explícito, por lo que es probable que ayude a más personas.
coreyward

Respuestas:


100

Estoy citando de esto :

Nota: Los nombres de las funciones no distinguen entre mayúsculas y minúsculas, aunque suele ser una buena forma de llamar a funciones tal como aparecen en su declaración.

Entonces, parece que las funciones definidas por el usuario no distinguen entre mayúsculas y minúsculas, hubo una votación para hacer que las funciones / objetos bajo PHP5 distingan entre mayúsculas y minúsculas.


3
PHP5 ya está disponible, su única esperanza es PHP6 y no creo que den ese paso. Se rompería demasiado por poca ganancia.
Mark Tomlin

3
@Mark Tomlin No estoy de acuerdo. La mejor práctica es mantener la misma carcasa que tiene el manual, por lo que debe romperse poco, al mismo tiempo que aumenta la claridad.
Ben Dauphinee

12
Guau. eso es triste. aunque ImAgEcReAtEfRoMpNg () es una buena forma de ofuscar el código ...
Pontomedon

8
Dado que la cita dice "no distingue entre mayúsculas y minúsculas", ¿por qué dice "Entonces parece que lo definido por el usuario distingue entre mayúsculas y minúsculas"? Si es un error tipográfico, debería corregirlo.
Barmar

11
¡Guauu! ¡Es realmente bueno descubrirlo después de 7 años de codificación!
Daan

34

No.

Las funciones PHP no distinguen entre mayúsculas y minúsculas.


19

TL; DR: los nombres de las clases no distinguen entre mayúsculas y minúsculas, pero usan siempre el mismo caso que en la declaración (lo mismo que con las funciones). Además, la creación de instancias de clases con diferentes mayúsculas y minúsculas tal como se definieron puede causar problemas con los cargadores automáticos.


Además, los nombres de las clases no distinguen entre mayúsculas y minúsculas:

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

Esto produce:

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"
}

El problema es el uso de cargadores automáticos y sistemas de archivos que distinguen entre mayúsculas y minúsculas (como ext2 / 3/4), ya que debe llamar al nombre de la clase con el mismo caso en el que se nombra el archivo que contiene la clase (no cómo el nombre de la clase está realmente en mayúsculas), o use strtolower:

El archivo de clase:

<?php
// filename something.php
class SomeThing {
   ...
}

La función de autocargador ( __autoloado una función para registrarse spl_autoload_register)

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

Ahora con este código:

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

Puede hacer que esto funcione (es decir, tener nombres de clase que no distingan entre mayúsculas y minúsculas utilizando un cargador automático) si agregó una llamada a strtolower()en el código del cargador automático, pero al igual que con las funciones, es mejor hacer referencia a una clase de la misma manera que se declara, tenga el nombre del archivo con el mismo caso que el nombre de la clase, use autocargadores y olvídese de usar strtolowery los me gusta.


7

No, son no entre mayúsculas y minúsculas, sin embargo, se debe utilizar siempre el caso que se encuentra en el manual, para mantener la coherencia.

Sin embargo, las variables distinguen entre mayúsculas y minúsculas.


3

En PHP, las variables distinguen entre mayúsculas y minúsculas, pero las funciones no tienen problemas como este. Puede usar las siguientes declaraciones para mostrar la salida, todas mostrarán el mismo resultado.

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

Por otro lado, si cambia la distinción entre mayúsculas y minúsculas de las variables, se mostrará el error.

Ejemplo:

<?php
$a=5;
echo $A;// It will show the error.
?>

Salida:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3

2

Y los nombres de los métodos tampoco distinguen entre mayúsculas y minúsculas. p.ej:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

salida:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

1

En conclusión de la respuesta de todos. Aunque PHP no requiere consistencia entre mayúsculas y minúsculas en todos los casos, incluso hasta ahora en PHP5.

La mejor práctica será

Utilice siempre los mismos casos cuando haga referencia a variables (es 'obligatorio) o funciones (es' opcional, pero recomendado).

Nunca se sabe, tal vez algún día la votación se lleve a cabo y se ahorrará toda la pesadilla de cambiar casos en sus aplicaciones que se hicieron hace un par de años y que requieren actualización en PHP.

Espero que ayude de todos modos.


Re "salvar toda la pesadilla de cambiar casos": No, tengo entendido que si el cambio se realiza alguna vez, la distinción entre mayúsculas y minúsculas sería una opción, establecida en php.ini. Conservando así la compatibilidad con versiones anteriores.
ToolmakerSteve

-2

Puede que sea demasiado tarde, pero ...

Todo el mundo ya lo sabía aquí: el motor PHP no se preocupa por el caso de las letras.

Y está la votación sobre el rastreador de errores de PHP, donde la mayoría dice: "Sí, estoy a favor de la sensibilidad a los casos".

Pero estoy en contra, porque en mi marco MVC, llamo a la acción del controlador:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ controller y $ action se toman de la URL tal cual.

Piense, si un usuario publica un enlace a mi sitio: https: // my-site / MyPartnerController / MyPartnerGallery

mientras que la clase se llama myPartnerController ...

Significa que nadie accede a esta página si los nombres de funciones y clases de PHP distinguen entre mayúsculas y minúsculas.

Sí, siempre uso todos los nombres en el código como se declararon. Pero rezo para que nunca hagan que los nombres de funciones y clases sean sensibles a mayúsculas y minúsculas.

¡Gracias!


1
eso es realmente malo ... si fuera a my-site / myLogInPage / loginsuccess , y adivinara lo que usted llamó su función de éxito de inicio de sesión en la que estaría, o podría borrar algunas cosas ...
Tschallacka
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.