Certificación Zend PHP 5.3 – Preguntas tipo (I)

Empezamos una nueva ronda de posts relacionados con la certificación Zend de PHP con preguntas similares a lo que os podéis encontrar en un examen real.

La idea es que seáis conscientes de la dificultad del examen y que no os precipitéis al presentaros. Y aunque las sepáis todas, no os confiéis ya que es bastante fácil fallar en preguntas fáciles el día del examen por no fijarnos bien. Pongo las preguntas en inglés, primero porque me da pereza traducirlo pero también para que veáis las preguntas tal cual las hacen en el examen.

Dicho esto, empezamos con los dos temas que ya hemos tratado en mis posts anteriores:

– The basics: http://www.ricardclau.com/2010/11/certificacion-zend-php-5-3-i-php-basics/
– Funciones: http://www.ricardclau.com/2010/11/certificacion-zend-php-5-3-ii-%e2%80%93-funciones-y-ambito-de-variables/

Pregunta 1

What is the output of the following code?

<?php
function x10(&$iNumero)
    $iNumero *= 10;
$iContador = 5;
x10($iContador);
echo $iContador;
?>

• Error: Unexpected T_VARIABLE
• 10
• Notice regarding pass by reference
• 50
• 5

Respuesta 1
La respuesta es que por pantalla aparecería: Error: Unexpected T_VARIABLE
En la función faltan las llaves {}. En los bucles y ifs, se pueden omitir, pero en las funciones no.
Si hubiera las llaves, la respuesta sería 50 ya que $iContador se pasa por referencia

Pregunta 2

What is the output of the following code?

<?php
function functionSplit()
{
$pre = 1;
?>
<?php
echo $pre;
}
functionSplit();
?>

• Error; function declarations can not be split over multiple PHP segments.
• Nothing
• 1
• 2

Respuesta 2
Has dudado, ¿eh? ¿Dará error o no? La respuesta es que da 1 ya que abrir y cerrar los tags de PHP, pese a ser megaguarro, es perfectamente válido. La idea es que allí donde podemos hacer un echo, podemos cerrar el tag de PHP y escribir HTML (o simplemente nada como este caso)

Pregunta 3

What is the output of the following code?

<?php
function byReference(&$variable = 5)
{
echo ++$variable;
}
byReference();
?>

• No output or error. Variables can not be optional and passed by reference.
• 5
• 6

Respuesta 3
Si has marcado la primera, tendrías toda la razón si esto fuera PHP4. Y luego la gran duda… ¿cómo iba el ++? En este caso, la respuesta es 6.

Pregunta 4

What is the output of the following?

<?php
function byRef(&$apples)
{
$apples++;
}
$oranges = 5;
$apples = 5;
byRef($oranges);
echo "I have $apples apples and $oranges oranges";
?>
Respuesta 4
Aixxx qué mala práctica llamar a las cosas todo igual y pasar una variable con el nombre de otra y encima por referencia. I have 5 apples and 6 oranges es la respuesta.

Pregunta 5

In PHP5 objects are passed by reference to a function when
• Always; objects are passed by reference in PHP5
• When the calling code preceeds the variable name with a &
• Never; objects are cloned when passed to a function
• When the function paramater listing preceeds the variable name with a &

Respuesta 5
La primera. Siempre. En PHP 4 esto no era así.

Pregunta 6

What is the output of the following?

<?php
$a = 010;
$b = 0xA;
$c = 2;
print $a + $b + $c;
?>

• 20
• 22
• 18
• $a is an invalid value
• 2

Respuesta 6
Qué grande la notación octal y la hexadecimal. 8 + 10 + 2 = 20

Pregunta 7

What would you replace ??????? with, below, to make the string Hello, World! be displayed?

<?php
function myfunction() {
???????
print $string;
}
myfunction("Hello, World!");
?>

• There is no way to do this
• $string = $argv[1];
• $string = $_ARGV[0];
• list($string) = func_get_args();
• $string = get_function_args()

Respuesta 7
¿Se puede? Pues sí, la opcion buena es el list con el func_get_args.

Pregunta 8

Which of the following is incorrect?
• function c(MyClass $a = new MyClass())
• function d($a = null)
• function e(&$a = 30)
• function a(&$a = array(10,20,30))
• function b($a = (10 + 2))

Respuesta 8
Son correctas la 2, la 3 y la 4. Se puede iniciar un valor por defecto a null, una variable por referencia e incluso declarar un array al vuelo. En cambio la primera y la última no son válidas. En la cabecera de una función podemos iniciar una variable pero no realizar una operación o instanciar un objeto (aunque la operación sean dos constantes “hardcoded”).

Pregunta 9

When your error reporting level includes E_STRICT, what will the
output of the following code be?

<?php
function optionalParam($x = 1, $y = 5, $z)
{
   if ((!$z > 0))
   {
      $z = 1;
   }
   for($count = $x; $count < $y; $count+= $z)
   {
     echo "#";
   }
}
optionalParam(2,4,2);
?>
Respuesta 9
E_STRICT… casi nadie lo tiene activado y hace cosas raras… ¿se podrá hacer esto de poner valores por defecto en las dos primeras y dejar la tercera sin valor por defecto? Pues sí, se puede (aunque es absurdo). Y el resultado es… vaya lío con este código tan raro… “#”

Pregunta 10

What is the output of the following?

<?php 
$a = 20;
function myfunction($b) {
$a = 30;
global $a, $c;
return $c = ($b + $a);
}
print myfunction(40) + $c;
?>
Respuesta 10
120

¿Cuántos habéis aprobado? No os quiero desanimar pero si no habéis sacado mínimo 9 aciertos y estáis pensando en presentaros… tenéis que estudiar bastante más. ¡Las preguntas de estos temas básicos es donde hay que asegurar el aprobado!

You may also like...

5 Responses

  1. ¡Las preguntas de estos temas básicos es donde hay que asegurar el aprobado!

    Cuanta razón tienes!
    ¿De qué vale aprobar Streams si luego suspendes PHP Basics? Me recuerda a alguien… 🙁 🙁

  2. Tenshin says:

    Me estoy preparando para hacer el examen de zend php5.3
    y he encontrado esta fabulosa web con estos articulos 😀
    Agradecerte tus explicaciones y donde centrarse para el examen pues con tanto temario uno no sabe donde centrarse.

  3. Ricard Clau says:

    Hola Tenshin

    Es cierto, hay muchísimo temario y es complicado saber en qué partes centrarse.

    En próximos días publicaré más cosas de la certificación así que sigue pasándote de vez en cuando!

  4. Marta says:

    Hola! Resulta que estoy estudiando para la certificacion, por cierto, buena la pagina, lo unico, la pregunta 6 no es 20 es 22, lo he probao, y $a = 10, no 8 como pones… simplemente queria ponerlo para futuros estudiantes.. o por si lo puedes corregir. Un saludo y gracias!!!

  5. Ricard Clau says:

    Hola Marta

    No sé cómo lo estás probando pero si haces
    $a = 010 esto es notación octal y $a coge el valor de 8.

    No es lo mismo $a = 010 que $a = 10 (por raro que parezca).

    Saludos!