扩展类不会看到父Codeigniter的属性

时间:2014-03-28 00:54:09

标签: php codeigniter oop

我从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。

知道为什么我无法访问这些属性吗?

1 个答案:

答案 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 不是控制器。所以从不

注意:答案是通用的。如果您需要任何具体说明,请询问,我可以更新我的答案