Con objetos es un poco más complicado, esto es porque dependiendo de tu versión de PHP, puedes pasar un objeto por valor o por referencia, cuando tu haces un return de una variable normal pasas el valor de tu variable, y en un objeto puedes pasar la referencia.
Todo depende de lo que necesites hacer ya que por ejemplo usando un objeto:
Código php:
Ver original<?php
function factorial($objeto) {
if ($objeto->factorial ==0) {
$objeto->factorial = 1;
return;
} else {
$aux = new StdClass();
$aux->factorial = $objeto->factorial - 1;
factorial($aux);
$objeto->factorial = $objeto->factorial * $aux->factorial;
return;
}
}
$obj = new StdClass();
$obj->factorial = 7;
factorial($obj);
printf( "el factorial de 7 es %s<br>", $obj->factorial ); ?>
No, aunque depures, $n, siempre trae el valor que le envia la función, por eso es una variable local, esta se va guardando y va almacenando, ve el ejemplo que te dejo Avatar810, es muy claro, conforme se va anidando la función va creando valores, pero estos son locales a la función, no se comparte ni es la misma variable.
Saludos.