Certificación Zend PHP 5.3 (I) – PHP Basics

Comenzamos este conjunto de posts sobre la certificación Zend con los elementos básicos del lenguaje.

Probablemente, si programas a diario en PHP, conocerás la mayoría de cosas que expondré a continuación, pero quizás tengas algunas dudas que pueden hacerte fallar preguntas fáciles en un examen.

Vamos a ello:

Tipos de variables

En PHP solamente existen estos tipos de variable:

Simples: integer, float, string, boolean
Complejos: array, object
Especiales: resource, NULL

El NULL es considera un tipo de variable ya que es “especial”. Por ejemplo, es lo que devuelve una función cuando no hacemos return de ningún valor.

Un resource es, por ejemplo, la salida de funciones como fopen o mysql_connect.

Notaciones en valores enteros

Existen 3 notaciones: decimal (la normal), hexadecimal (que empieza por 0x y se suele usar al tratar con datos binarios) y octal (que empieza por 0 y se usa sobretodo para permisos de archivos y directorios en UNIX)

<?php
   $iEntero1 = 6;
   $iEntero2 = -3;
   $iOctal1 = 010; //--> 8
   $iOctal2 = 0164; //--> 4 + 6*8 + 1*8*8
   $iHexa1 = 0xff; //-->255;
   $iHexa2 = 0xAB2; //--> 2 + 16*11 + 16*16*10
?>

Es bastante habitual encontrar en el examen una pregunta con una suma que mezcla las 3 notaciones

Precedencia de operadores

Esto no tiene mucha historia, funciona igual en todos los lenguajes pero cuidado con las formas abreviadas ++ que pueden ir por delante o detrás de las variables y tener efectos inesperados

<?php
   $a = 3;
   echo $a++; //--> 3
   $b = 5;
   echo ++$b; //--> 6
 
   $c = 3;
   echo $c++*++$c; //--> 15!!!
   $d = 3;
   echo ++$d*$d++; //--> 16!!!
?>

Así pues, cuidado con el ++ y sus efectos colaterales!

Nombres de variables y funciones

Los nombres de variable y funciones pueden empezar por _ y cualquier carácter entre a-z o A-Z.
Pueden contener números en los nombres pero NUNCA como primer carácter.
PHP es case sensitive en variables y funciones.

Según esto:

$var1, $vAr1, $vAR1 son variables diferentes y los 3 son válidos
$__var es también válido
$4listados NO es un nombre válido
$españa NO es un nombre válido en PHP5.3

function func1() {}, function fUNC1() {}, function __func(){} son nombres válidos
function 1funcion() {} o function ññññ() {} NO son nombres válidos

PHP6 será compatible unicode nativo y podremos tener nombres con cualquier carácter, incluso caracteres asiáticos así que probablemente ya no serán necesarios los ofuscadores de código y directamente no entenderemos nada si no escribimos todos en inglés.

Esto parece una tontería o algo muy evidente pero es habitual encontrar códigos trampa en el examen con nombres que empiezan por números y te preguntan

<?php
function 1puntopornumero($cuantos=4) {
   for($i=0;$i&lt;$cuantos;$i++) echo '.';
}
1puntopornumero();
?>

Y las posibles respuestas:
– Un notice
– Un warning
– Un error
– ….
– …

La respuesta sería un Error ya que lo da al parsear y no al ejecutar, pero podemos dudar si es un warning o notice o incluso no fijarnos en que es un número el primer carácter y elegir los ‘….’

Variables variables

En situaciones normales no deberíamos usar estas cosas ya que hacen que el código sea complicado de seguir.
Sin embargo, los frameworks lo usan constantemente y a veces nos pueden ahorrar mucho trabajo

<?php 
   $a = 'Hola';
   $$a = ' Mundo'; //-> Esto es equivalente a hacer $Hola = ' Mundo';
   echo $a.$$a; // -> Hola Mundo
   // Pero si ponemos variables dentro de ", que PHP evalua en el momento de asignar el string
   echo "$a$$a"; //-> Hola $Hola
   echo "$a${$a}"; // -> Hola Mundo
?>

Mucho cuidado con usar esta propiedad. A veces puede ser muy cómodo tener nombres de variables dinámicos pero el pobre que viene detrás puede tardar bastante en encontrar qué hace exactamente el código.

== VS ===

Esto quizás sea más conocido que el resto pero sigue habiendo gente que tiene problemas a veces.
== en PHP significa igual valor
=== significa igual valor y tipo de variable

A ver cómo andáis con esto

<?php
   var_dump(3=='3'); //-> Verdadero
   var_dump(3==='3'); //-> Falso
   var_dump(150==true); //->Verdadero (Ojo con esta!)
   var_dump('a'==true); //->Verdadero (Ojo con esta también!)
   var_dump(150===true); //-> Falso (menos mal!)
   var_dump(0==false); //-> Verdadero
   var_dump(0===false); //-> Falso
   var_dump(0==NULL); // -> Verdadero
   var_dump(0===NULL); //-> Falso
   var_dump('a'=='A'); //-> Falso, es mejor de hecho usar strcmp o strcasecmp
   var_dump(8==8.0); //-> Verdadero
   var_dump(8===8.0); //-> Falso
   var_dump(8==010); //-> Verdadero
   var_dump(8===010); //-> Verdadero
   var_dump(255==0xff); //-> Verdadero
   var_dump(255===0xFF); //-> Verdadero
?>

Con esto terminamos la primera ronda de curiosidades, próximamente más!

IMPORTANTE

Lo que expongo aquí es una recopilación de dudas / curiosidades que me preguntaban mis alumnos, que me han sorprendido durante mi estudio de la certificación o que veo que la gente suele dudar en nuestro día a día desarrollando.

En ningún caso pretende sustituir a las guías de estudio de Zend, a los cursos de pago que existen ni tan siquiera es todo lo que entra en el examen.

You may also like...

3 Responses

  1. Estaré esperando tu post sobre mi eterna duda pendiente: las referencias… BrrRRrRrRrR! 😀

  2. Ricard Clau says:

    Seguramente el lunes: Certificación Zend PHP 5.3 (II) – Funciones, así que espero que con eso lo entiendas! 😀

  3. gloton says:

    fantastico blog, gracias es la mejor pagina de php que he visto o la que mas me ha gustado a mi, hay mucho post bueno no solo este, gracias amigo.

Leave a Reply

Your email address will not be published. Required fields are marked *