我正在使用互联网中的一些示例创建一个休息服务器。来源是: 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 / example时,它会以无限循环运行。
我已将方法getMyWars更改为:
echo $this->method."\n\n";
echo __METHOD__."\n\n";
$arReturn = array_map(__METHOD__, $myVars);
print_r($arReturn);
我得到了:
GET
restObject::getMyVars
......无限且它永远不会到达:print_r($ arReturn);
也许我做错了什么。
答案 0 :(得分:0)
嗯,那段代码看起来很奇怪,它总是会把自己调用到时代的末尾(或者至少在调用堆栈溢出之前)。让我解释一下:
{{1}}
答案 1 :(得分:0)
您的代码显然有效。我认为正在发生的是:
$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);