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>';
}
$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.