La sensibilidad de PHP

No, no voy a hablar de los sentimientos que pueda tener este lenguaje de programación (o quienes lo usan). Voy a hablar de uno de los misterios en PHP: ¿por qué unas cosas son Case Sensitive y otras no?

Es decir, ¿por qué unas veces tenemos un error si no respetamos las mayúsculas y otras no?

PHP es “case sensitive”... depende con qué

El término “case sensitive” se usa cuando no se pueden usar mayúsculas o minúsculas indistintamente. Por ejemplo, en la mayoría de los lenguajes de programación no es lo mismo miFuncion() que mifuncion().

Resulta que en PHP nos encontramos que con determinados elementos no importa si usamos mayúsculas o minúsculas, pero con otros sí.

Seguro que hay una buena razón para hacer las cosas así, aunque la desconozco. Creo que es una de las cosas que no ayudan a que la gente se lo tome como un lenguaje de programación serio y habría que corregirlo.

Elementos que son case sensitive

Variables

Este código va a provocar un error porque la variable $mivar no existe:

<?php
$miVar = 'Hola';
echo $mivar; // error

Índices de un array

Aquí también tendremos un error:

$miArray['Primero'] = 1;
echo $miArray['primero'];

Constantes

En las constantes también debemos respetar las mayúsculas. Esto nos va a dar un aviso:

define('MI_CONSTANTE', 1);
echo mi_constante;

Y también esto:

const CONSTANTE = 1;
echo constante;

Elementos que son insensibles a las mayúsculas

Nombres de función

Con este código no vas a tener ningún problema a pesar de no respetar las mayúsculas:

function miFuncion()
{
    echo "Hola\n";
}

mifuncion();

Palabras clave

Da igual si escribes if, IF, If o incluso iF, todas son válidas. Lo mismo sucede con else, foreach, while, echo, etc.

Case sensitiveness en una clase

En las clases también tenemos, cómo no, un poco de todo. Si tenemos esta clase:

class MiClase
{
    public $miPropiedad;

    function __construct()
    {
        echo "Mi contructor\n";
    }

    public function miMetodo()
    {
        echo "Mi método";
    }
}

No vamos a tener ningún problema si instanciamos la clase así:

$clase = new miclase();

Tampoco habrá problema si llamamos al método mimetdo() aunque esté definido como miMetodo():

$clase->mimetodo();

Pero con las propiedades sí vamos a tener problemas:

$clase->mipropiedad;
Autor:
Nivel: Principiante
Palabras clave:
Fecha publicado:
Fecha actualizado: 17-10-2016

Otros capítulos de la misma serie

Este capítulo es parte de la serie: Trucos PHP.

Y muchos más en preparación.

Disponible en los planes: Laravel hero PHP a tope