Если я правильно понял, чего вы хотите достичь, вы можете использовать замыкание:
class kittengarten
{
var $cats;
function __construct()
{
$this->cats[0]='Jerry';
$this->cats[1]='John';
$this->cats[2]='Barack';
}
public function __get($var)
{
if($var == "CAT")
{
$array_of_cats=$this->cats;
return function($num) use ($array_of_cats)
{
return $array_of_cats[$num];
};
}
}
}
$kittengarten=new kittengarten();
echo 'The third directly accessed cat is '.$kittengarten->cats[2];
$cat=$kittengarten->CAT;
if (is_string($cat)) echo $kittengarten->CAT;
else echo 'The third cat accessed using closure is '.$cat(2);
Выход:
Третья кошка прямого доступа - Барак
Третья кошка, доступ к которой осуществляется с помощью закрытия, - Барак