我有控制器:
class Comments extends Controller
{
public function GenerateComments($id)
{
$theme = DB::table('New_Themes')
->where('id', $id)
->get();
$Comments = NewTheme_Comment::where('id_theme', $id)->get();
$array = $this->tree($Comments);
function tree($Comments, $parent_id = 0, $level=0, $c=0)
{
global $var;
global $array;
global $m;
foreach($Comments as $Comment)
{
if ($Comment['parent_id'] == $parent_id) {
$m++;
$array[$m][0]=$Comment['id'];
If ($level > $var) {$var++; $array[$m][1]=0;} else {
if ($c < 0) $array[$m][1]=$var-$level+1; else {$c--; $array[$m][1]=0;};
$var=$level;
};
tree($Comments, $Comment['id'], $level+1,$c);
}
};
return $this->$array;
};
return view('comments', ['Themes'=> $theme, 'Comments'=> $Comments, 'Array' => $array]);
}
Run Code Online (Sandbox Code Playgroud)
问题是
方法[树]不存在。
但是我不明白为什么会出现,如果我在一个函数中调用一个函数(如下所示)
$array = $this->tree($Comments);
function tree($Comments, $parent_id = 0, $level=0, $c=0)
{
return $this->$array;
}
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么这不起作用?
您正在调用函数tree,$this这意味着PHP将tree在Comments类内部而不是您的GenerateComments方法中看起来是方法。
更改
$array = $this->tree($Comments);
Run Code Online (Sandbox Code Playgroud)
对此
$array = tree($Comments);
Run Code Online (Sandbox Code Playgroud)
注意:调用函数后,您还需要定义函数。PHP将tree在命名空间中保持原样,因此将无法正常工作。而是在调用函数之前先定义函数。像这样
function tree($Comments, $parent_id = 0, $level = 0, $c = 0) {
// ...
}
$array = tree($Comments);
Run Code Online (Sandbox Code Playgroud)
也建议不要在函数内部定义函数。相反,只需在您的控制器内部创建tree函数a method并使用它即可。像这样
class Comments extends Controller
{
public function GenerateComments()
{
// ...
$array = $this->tree($comments);
}
public function tree($tree)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14369 次 |
| 最近记录: |