Para obtener una respuesta, deberá configurar una plataforma de prueba de referencia. Compare todos los métodos en varias iteraciones (cientos de miles o millones) en un cuadro inactivo. Pruebe la función incorporada de microtime para medir la diferencia entre el inicio y el final. Ese es tu tiempo transcurrido.
La prueba debe tomarle 2 minutos para escribir.
Para ahorrarte un poco de esfuerzo, escribí una prueba. Mi propia prueba muestra que la solución funcional (substr) es MUCHO más lenta (esperada). La solución idiomática de PHP ({}) es tan rápida como el método de índice. Ellos son intercambiables. El ([]) es el preferido, ya que esta es la dirección hacia donde se dirige PHP con respecto a las compensaciones de cadena.
<?php
$string = 'abcd';
$limit = 1000000;
$r = array(); // results
// PHP idiomatic string index method
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = $string{2};
}
$r[] = microtime(true) - $s;
echo "\n";
// PHP functional solution
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = substr($string, 2, 1);
}
$r[] = microtime(true) - $s;
echo "\n";
// index method
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = $string[2];
}
$r[] = microtime(true) - $s;
echo "\n";
// RESULTS
foreach ($r as $i => $v) {
echo "RESULT ($i): $v \n";
}
?>
Resultados:
resultado (PHP4 & 5 llaves idiomáticas sintaxis): 0.19106006622314
resultado (función Slice cadena): 0.50699090957642
resultado (* sintaxis de índice, el futuro como el llaves están en desuso *): 0.19102001190186
'$ string [2]' o '$ string {2}' deben ser idénticos en velocidad y consumo de memoria y e cualquiera de ellos debería ser más rápido que substr. – anubhava