我从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。
知道为什么我无法访问这些属性吗?
答案 0 :(得分:1)
简而言之,答案是你不需要在这里扩展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的属性,但不能访问Current控制器的值,因为这两者是不同的 object 。
所以我的回答是如何获取价值的?我已经提到的一种方式。如果您需要与库共享某些属性,那就足够了。但是,如果您需要访问所有Controller 实例,该怎么办?有一个函数可以获取控制器实例get_instance()
的引用。您可以在任何地方使用此功能并访问所有公共属性控制器。如果您需要访问控制器的任何私有属性,请定义geter函数以访问它。
首先,您需要了解OOP的基本知识。了解类,对象,继承..
当我说My_controller的属性与您从 uploadhandler 访问的属性不同时,如果您不熟悉类和对象,可能会让您感到困惑。这是两个不同类的实例(对象)。 简而言之,您可以使用以下类别:车辆,车辆,计算机和人员。他们所有的共同属性都是 name , weight ..
那么,我们可以从其他类继承任何这些类吗?
简单的答案是否定的。我们不能(!)定义从其他人扩展的Person类。那么我们如何才能决定哪种不连贯是合法的。如果您可以说 Foo 是栏,您可以编写从Bar延伸的 Foo 类。现在从你的情况来看,显然 uploadhandler 不是控制器。所以从不从
注意:答案是通用的。如果您需要任何具体说明,请询问,我可以更新我的答案