IronWoods.es

Desarrollo web

Blog / PHP / Llamadas de retorno en el interior de clases

Para hacer una llamada de retorno dentro de una clase, por ejemplo con la función array_walk( ), se pueden presentar varias situaciones.

1. Llamada a una función nativa.

Usaremos esta opción si existe una función nativa adecuada a nuestras necesitades. El ejemplo es un poco tonto ya que en realidad la función llamada no hace nada, sólo se comprueba que la llamada no falla. Usaremos el nombre de la función como un string.

2. Llamada a una función propia.

LLamar a una función que hemos definido nosotros es más habitual y el procedimiento es el mismo que en el caso anterior, solo hay que nombrar a la función.

3. Llamar a un método de la propia clase

Se requiere una referencia a la propia clase y el nombre del método, introduciendo ambos datos en un array. Hay dos situaciones a contemplar:

  • a. Llamada a un método estático
    Usando la referencia a la clase self:: o el nombre de la clase en forma de string
  • b. Llamada a un método NO estático
    Usando la referencia a la clase $this

4. Llamar a un método de otra clase

Similar al caso anterior, usaremos el nombre de clase y el nombre del método.

Código de ejemplo

<?php namespace tests;


class CallbacksTest

{


private $arr_fruits = [

"a" => "lemon",

"b" => "orange",

"c" => "banana",

];



public function run()

{


/* Llamando a método de la misma clase */

$callback = [

$this,

'showFruits'

];

echo '<b>' . get_class() . ' / ' . $callback[1] . '()</b><br>';

array_walk(

$this->arr_fruits,

$callback

);

echo '<hr>';


/* Llamando a método de otra clase */

$callback = [

'\\tests\\Xxx',

'showValues'

];

echo $callback[0] . ' / ' . $callback[1] . '()<br>';

array_walk(

$this->arr_fruits,

$callback

);

echo '<hr>';


/* Llamando a función nativa */

$callback = 'strpos';

echo 'function ' . $callback . '()<br>';

array_walk(

$this->arr_fruits,

$callback

);

echo '<hr>';


/* Llamando a función propia */

$callback = '\\tests\\showKeys';

echo 'function ' . $callback . '()<br>';

array_walk(

$this->arr_fruits,

$callback

);

} //run()


private function showFruits($value, $key)

{

echo '<b>' . $value . '<b><br>';

}

} //class



class Xxx

{

public static function showValues($value, $key)

{

echo '<b>' . $value . '</b><br>';

}

} //class


function showKeys($value, $key)

{

echo '<b>' . $key . '</b><br>';

}



/**

* Runs test

*

*/

$test = new CallbacksTest();

$test->run();


Al ejecutar el código anterior en el navegador veremos:

ironwoods\tests\CallbacksTest / showFruits()

lemon

orange

banana


\ironwoods\tests\Xxx / showValues()

lemon

orange

banana


function strpos()


function \ironwoods\tests\showKeys()

a

b

c


He expuesto casos básicos, existen más combinaciones.

Código completo.