我正在使用控制器和视图(没有框架),并且需要来自父控制器的视图时出现问题,导致变量未定义。
这是一个带有视图功能的主控制器,它需要视图。
class Controller {
public function view($view, $data =[]){
require_once './app/views/' . $view . '.php';
}
然后有一个用户控制器扩展控制器,方法是" mypage"它在变量中加载东西并需要一个视图。 (如果已登录,您可以在URL中访问Mypage。)
class User extends Controller{
public function mypage(){
$userdetails = $this->getuserdetails();
$userstatus = $this->getstatus();
$messages = new Messages();
$showmessages = $messages->showMessages();
$friends = new Friends();
$outrequests = $friends->outRequests();
$increquests = $friends->incRequests();
$friendsstatuses = $friends->friendsstatuses();
$getfriends = $friends->friends();
$this->view('mypage');
}
}
行 $ this->视图(' mypage'); 启动父控制器中的视图方法,该方法需要mypage视图(mypage.php),其中使用变量。探测是mypage.php中所有变量都未定义。
如果我用
交换该行require_once "./app/views/mypage.php";
,然后它的工作原理。那么,为什么在需要来自Controller时我会丢失变量,以及我做错了什么?
答案 0 :(得分:2)
狂野猜测,但我认为这是一个范围问题:
您在mypage()
函数中定义变量,因此这些变量仅存在于此函数的范围内。
调用$this->view(...)
只调用另一个有自己范围的方法(你的变量不存在)。
当您直接调用require_once(...)
时,包含的视图脚本会继承当前范围内已定义的变量。