从jquery ajax调用CodeIgniter控制器方法-imgupload。这个控制器扩展了我的自定义前端控制器。
class newad extends My_Controller{
public function __construct() {
parent::__construct();
}
public function imageupload() {
$this->load->library("uploadhandler");
}
imgupload方法调用从newad扩展而来的uploadhandler类。
class uploadhandler extends newad {
类的功能正常工作,除了一件事,我不能访问My_Controller类的属性,即使它们被声明为受保护的。继承链是这样的:My_Controller->newad->uploadhandler.
知道为什么我不能访问这些属性吗?
总之,答案是您不需要在这里扩展Controller类。您可以将该值作为参数传递给库。
$params = array('user_ud' => $this->userID, 'otehr' => 'other');
$this->load->library('uploadhandler', $params);
//Now from your library
class uploadhandler{
public function __construct($params)
{
// Do something with $params
}
//.. Your code...//
}
现在关于你的问题:
类的功能正常工作,除了一件事,我不能访问My_Controller类的属性,即使它们被声明为受保护的。继承链是这样的:My_Controller->newad->uploadhandler。知道为什么我不能访问这些属性吗?
作为继承链,你可以从你的库中访问My_Controller的属性,但不能访问当前控制器的值,因为这两个是不同的对象。
那么这就是我的答案我们如何访问这个值呢?一种方法我已经提到过了。如果您需要与库共享某些属性,这就足够了。但是,如果需要访问所有Controller 实例,该怎么办呢?有一个函数来获取控制器实例get_instance()
的引用。您可以在任何地方使用此函数并访问所有公共属性控制器。如果你需要访问控制器的私有属性,定义一个getter函数来访问它。
首先你需要学习关于OOP的基本知识。学习类,对象,继承…
当我说My_controller的属性与你从uploadhandler访问的相同属性不同时,如果你不熟悉类和对象,可能会感到困惑。这里有两个不同类的实例(对象)。简而言之,假设您有一些类:Vehicle, Car, Machine和Person。它们都有共同的属性,比如名称, 重量…
那么,我们可以从其他类继承这些类吗??
简单的答案是否定的。我们不能(!)定义从Others扩展的Person类。那么我们如何决定哪种不连贯是合法的呢?如果你可以说Foo是Bar,你可以从Bar扩展Foo类。现在从您的情况来看,很明显uploadhandler不是控制器。所以永远不要从东西扩展一个任何东西,而不是东西。
注:答案是通用的。如果你需要任何具体的澄清,只要问,我可以更新我的答案