Questo
post fa parte di una serie preparata qualche anno fa per
delle lezioni su PHP.
Passaggio di parametri
Quando si richiama una funzione è possibile passarle dei parametri. Gli esempi che seguono possono essere applicati anche, ovviamente, alle funzioni membro delle classi.Tutti gli esempi vengono presentati con il relativo test Lime, in modo da abituarsi all'idea dello Unit Testing, di cui abbiamo parlato.
Passaggio per valore
function foobar($a){
$a++;
return $a;
}
$t=new lime_test(1, new lime_output_color());
$t->is(foobar(5), 6, 'foobar() returns the value incremented by one');
Impostazione di un valore di default
function foobar($a=4)
{
$a++;
return $a;
}
$t=new lime_test(2, new lime_output_color());
$t->is(foobar(5), 6, 'foobar() returns the value incremented by one');
$t->is(foobar(), 5, 'foobar() takes 4 as default, and returns 5');
Controllo dei parametri
function foobar($a)
{
if (!is_integer($a))
{
throw new Exception('Function foobar accepts only integers as parameter');
}
$a++;
return $a;
}
$t=new lime_test(3, new lime_output_color());
$t->is(foobar(5), 6, 'foobar() returns the value incremented by one');
try
{
$n=foobar('abc');
$t->fail('foobar() does not throw an exception with a string parameter');
}
catch(Exception $e)
{
$t->pass('foobar() throws an exception with a string parameter');
}
try
{
$n=foobar(1.2);
$t->fail('foobar() does not throw an exception with a float parameter');
}
catch(Exception $e)
{
$t->pass('foobar() throws an exception with a float parameter');
}
Oggetti come parametri
Il controllo del tipo è automatico per gli oggetti, se si indica esplicitamente a che classe devono appartenere:
class BazBar
{
private $v;
public function __construct($v)
{
$this->v=$v;
}
public function getV()
{
return $this->v;
}
public function incV()
{
$this->v++;
return $this;
}
}
class ExtraBazBar extends BazBar
{
}
function foobar(BazBar $a)
{
$a->incV();
return $a->getV();
}
$t=new lime_test(2, new lime_output_color());
$t->is(foobar(new BazBar(5)), 6, 'foobar() accepts a BazBar object');
$t->is(foobar(new ExtraBazBar(5)), 6, 'foobar() accepts an ExtraBazBar object');
Array di parametri
function foobar($parameters=array())
{
$v=$parameters['value']+$parameters['inc'];
return $v;
}
$t=new lime_test(1, new lime_output_color());
$t->is(foobar(array('value'=>5, 'inc'=>1)), 6, 'foobar() accepts an array of parameters');
Passaggio per riferimento
function foobar(&$v)
{
$v++;
return $v;
}
$t=new lime_test(1, new lime_output_color());
$k=5;
foobar($k);
$t->is($k, 6, 'foobar() changes the value of the variable passed as parameter');
Altre cose utili
In alcuni casi potrebbe essere utile fare ricorso alle funzioni func_num_args(), func_get_args(), ecc. Consultare le relative pagine del manuale.
Nessun commento:
Posta un commento