Я создаю сервер отдыха, используя некоторые примеры в Интернете. Источник: https://github.com/danucu/GUS/blob/master/restfulengine/restfulobj.php
Проблема в том, что когда я вызываю объект, он снова вызывает себя в методе getMyVars:
protected function getMyVars($myVars = null) {
if (empty($myVars)) {
$myVars = $this->showMyPublicsOnly();
}
if (is_array($myVars)) {
/*
* Intorc array convertit la obiect
* utilizand __METHOD__ (constanta ;) )
* pentru apelurile recursive
*/
return array_map(__METHOD__, $myVars);
} else {
// intorc array
return $myVars;
}
}
Объект полного отдыха находится здесь:
https://github.com/danucu/GUS/blob/master/restfulengine/usertest.php
Когда я запускаю localhost/rest/UserREST/пример, он работает в бесконечном цикле.
Я изменил метод getMyWars на:
echo $this->method."\n\n";
echo __METHOD__."\n\n";
$arReturn = array_map(__METHOD__, $myVars);
print_r($arReturn);
И я получил:
GET
restObject::getMyVars
... бесконечно и никогда не достигает: print_r ($ arReturn);
Может быть, я что-то делаю неправильно.
Очевидно, ваш код работает. Я думаю, что это происходит:
$this->showMyPublicsOnly()
Поэтому, если у вас есть, скажем,
[ 'varOne' => 'Hello', 'varTwo' => 'World', 'varThree' => 42 ];
он будет работать, но
[ 'varOne' => '', ]
будет цикл.
Вы можете попробовать следующее:
// Only iterate on non-empty values
$myVars = array_filter($myVars);
// If there are no non-empty values...
if (empty($myVars)) {
/* ...this would loop, so we return an empty array */
return [ ];
}
return array_map(__METHOD__, $myVars);
Ну, этот код выглядит действительно странным, он всегда будет называть себя до конца времен (или, по крайней мере, до тех пор, пока переполнение вызовов не переполнится). Позволь мне объяснить:
if (is_array($myVars)) { //is_array === true
return array_map(__METHOD__, $myVars); // This will call __METHOD__ (getMyVars); and pass $myVars to it (which is an array).
} else { //This will never be reached.
return $myVars;
}
__METHOD__
будут передаваться все значения в$myVars
одно за другим, не так ли? Не оригинальный массив.