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


Estaba buscando un código, y encontré algunas llamadas a mySQL_fetch_array. Es PHP sensible a mayúsculas y minúsculas acerca de los nombres de funciones? Recuerdo haber leído esto en alguna parte, pero no puedo encontrar ninguna referencia a él.

Author: Ben Dauphinee, 2011-04-13

8 answers

Cito de esto :

Nota: Los nombres de las funciones son insensible a mayúsculas y minúsculas, aunque por lo general buena forma de llamar a las funciones ya que aparecen en su declaración.

Por lo tanto, parece que las funciones definidas por el usuario no distinguen entre mayúsculas y minúsculas, hubo un voto para hacer que las funciones/objetos bajo PHP5 distingan entre mayúsculas y minúsculas.

 93
Author: SIFE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-29 23:03:12

No.

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

 32
Author: mpen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 17:12:00

TL;DR: los nombres de clase 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, crear instancias de clases con diferentes casos 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 usar cargadores automáticos y sistemas de archivos sensibles a mayúsculas y minúsculas (como ext2/3 / 4), en el sentido de que debe llamar al nombre de la clase con el mismo que contiene la clase se nombra (no cómo el nombre de la clase es realmente encajonado), o use strtolower:

El archivo de clase:

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

La función de autocargador (__autoload o una función con la que 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

Usted puede hacer este trabajo (es decir. tener nombres de clase efectivamente insensibles a mayúsculas y minúsculas usando un autocargador) si agregaste una llamada a strtolower() en el código del autocargador, pero al igual que con las funciones, es mejor hacer referencia a una clase de la misma manera que se declara, tiene el nombre de archivo con el mismo caso que el nombre de la clase, usa cargadores automáticos, y olvida usar strtolower y similares.

 18
Author: Carlos Campderrós,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-14 11:52:41

No, son no distinguen entre mayúsculas y minúsculas, sin embargo, siempre debe usar el caso que está en el manual, para mayor consistencia.

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

 7
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-13 01:37:40

En PHP las variables distinguen entre mayúsculas y minúsculas, pero las funciones no tienen ningún problema como este.Puede usar las siguientes instrucciones 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 sensibilidad de mayúsculas y minúsculas de las variables, entonces 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
 3
Author: atif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-26 13:07:00

Y los nombres de los métodos también no distinguen entre mayúsculas y minúsculas. eg: -

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

Salida:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6
 2
Author: Habeeb Perwad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-10 14:33:11

En conclusión de la respuesta de todos. Aunque PHP no requiere consistencia de mayúsculas y minúsculas en todas las instancias incluso hasta ahora en PHP5.

La mejor práctica será

Siempre use los mismos casos cuando haga referencia a cualquiera de las variables (su' obligatorio) o funciones(su' opcional, pero recomendado).

Nunca se sabe tal vez un día la votación pase y se salvará toda la pesadilla de cambiar los casos en sus solicitudes hechas hace un par de años que requieren actualización en PHP.

Espero que ayude de todos modos.

 1
Author: weia design,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-04 17:08:09

Puede ser que esto sea demasiado tarde, pero...

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

Y está el voto sobre PHP bugtracker, donde la mayoría dice: "Sí, soy sensetivity pro case".

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

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

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

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

Mientras que la clase se llama myPartnerController...

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

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

¡Gracias!

 -2
Author: Vsevolod Azovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-12 21:58:36