您好我正在尝试在Laravel 5.2 for Controllers中进行单继承。
这是我的父基本控制器类
<?php
namespace App\Http\Controllers\Moviesfrontend;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class BaseController extends Controller
{
public function __construct($request)
{
//code to check whether city is set in session or not
$selectedcity=$request->session()->get('selectedcity');
}
}
在BaseController中,类构造将获取存储在会话中的城市名称。 现在我想访问存储在我的子类中的$ selectedcity中的这个城市名称。
我的子控制器类是
<?php
namespace App\Http\Controllers\Moviesfrontend;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class HomeController extends BaseController
{
public function __construct(Request $request)
{
parent::__construct($request);
}
public function index(Request $request)
{
echo $selectedcity;
}
}
Bedefault我猜父类变量可以被子类访问,但这不起作用,我收到错误信息,找不到$ selectedcity。
请帮助我在chlid课程中访问此变量。
答案 0 :(得分:1)
您的$selectedcity
是local variable。它只存在于构造函数的函数范围内。调用构造函数后它将消失。您需要将其分配给instance variable,例如
class BaseController extends Controller
{
protected $selectedCity;
public function __construct($request)
{
$this->selectedCity = $request->session()->get('selectedcity');
…
然而,这将使从BaseController
派生的任何子类可以访问它。如果那就是你想要的,那就按图所示进行。
但是从您显示的代码中,BaseController
看起来多余。只需删除BaseController
并将构造函数移至HomeController
:
class HomeController extends Controller
{
private $selectedCity;
public function __construct($request)
{
$this->selectedCity = $request->session()->get('selectedcity');
…
要访问实例变量,您必须通过$this
获取它,例如
public function index(Request $request)
{
echo $this->selectedCity;
…
如果您不清楚这些主题,请务必阅读chapter on Object Inheritance in the PHP Manual。