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


Extended class does not see property of parent Codeigniter

从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访问的相同属性不同时,如果你不熟悉类和对象,可能会感到困惑。这里有两个不同类的实例(对象)。简而言之,假设您有一些类:VehicleCarMachinePerson。它们都有共同的属性,比如名称重量

那么,我们可以从其他类继承这些类吗??

简单的答案是否定的。我们不能(!)定义从Others扩展的Person类。那么我们如何决定哪种不连贯是合法的呢?如果你可以说FooBar,你可以从Bar扩展Foo类。现在从您的情况来看,很明显uploadhandler不是控制器。所以永远不要东西扩展一个任何东西,而不是东西

注:答案是通用的。如果你需要任何具体的澄清,只要问,我可以更新我的答案