【问题标题】:Access public variables of class in another class both are extending CI_Controller class codeigniter php访问另一个类中类的公共变量都在扩展 CI_Controller 类 codeigniter php
【发布时间】:2015-05-31 08:53:21
【问题描述】:

我想访问一个类登录的公共变量而不扩展其他类在codeigniter中检查这里变量是类登录中的$fb_data 这是我的班级登录代码

class Login extends CI_Controller
{

  public $fb_data;
    public function __construct()
    {
        parent::__construct();
        $this->ci =& get_instance();
        $this->load->library(array('session', 'lib_login'));
        $this->load->model('users_model');
        if (!isset($this->fb_data['me']) ) {
          $this->fb_data = $this->lib_login->facebook();
        }                

    }
     public function facebook()
    {               
        if (isset($this->fb_data['me'])) {
            echo "<pre>";
             var_dump($this->fb_data);
            echo "</pre>";                 
            echo '<a href="'.site_url("login/destroy").'">logout</a>';
        } else {
            echo '<a href="' . $this->fb_data['loginUrl'] . '">Login</a>';
        }
    }
}

这是我的类检查代码

class Check extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library(array('session', 'lib_login'));
        $this->load->model('users_model');                       
    }       
    public function index()
    {        
        if (isset($this->fb_data['me'])) {
            echo "<pre>";
             var_dump($this->fb_data);
            echo "</pre>";     
            echo '<a href="'.site_url("login/destroy").'">logout</a>';
        } else {
            echo '<a href="' . $this->fb_data['loginUrl'] . '">Login</a>';
        }
    }


}

但是每当我调用检查/索引函数时,它都会给我这个错误

Message: Undefined property: Check::$fb_da

他们有什么方法可以访问 $fb_data 提前致谢。

【问题讨论】:

    标签: php codeigniter class oop inheritance


    【解决方案1】:

    首先在check.php中包含login.php

    require_once 'login.php'
    

    然后创建一个登录实例

    $login = new Login();
    

    现在访问 fb_data

    $login->fb_data;
    

    【讨论】:

    • 我们可以在不包含login.php文件的情况下访问它
    • 我已经包含了它,但它给了我这个错误消息:未定义的变量:登录
    • 它也给出了两个错误第二个是尝试获取非对象的属性
    • 创建一个方法来访问 fb_data 然后调用该方法。
    • 因为我是初学者,所以一点点代码都会有帮助
    【解决方案2】:

    当您发出请求时,您可以使用在该请求中实例化的任何内容。没有安装的东西是不能用的。所以Check.php 控制器不知道$fb_data 是什么,因为它被计算为局部变量。如果你想在$fb_data 中有一些值并用伪$this-&gt;fb_data 得到它,它应该设置在更高的实例中,并用工作类扩展。答案是否定的。但是您可以创建APPPATH . 'core/MY_Controller.php' 并在APPPATH . 'controllers/Login.php' 和/或APPPATH . 'controllers/Check.php' 文件中包含您以后想使用的所有代码。为此,这些文件需要扩展 MY_Controller 而不是 CI_Controller

    【讨论】:

    • 为什么 MY_Controller 它是干什么用的...?
    • 所以我应该在核心文件夹中创建 MY_Controller.php 文件,然后我需要扩展登录并使用 MY_Controller 而不是 CI_Controller 检查类。我是对的。以及 My_Controller 扩展了哪个类,它扩展了 CI_Controller....
    • 你应该检查docs and how to extend core classes。在该类中,您必须设置以后要在扩展它的控制器中使用的所有代码。
    • 是他们的任何其他方式我可以做到这一点,而无需在核心文件夹中创建文件
    • 我不确定你的意思。这是常规/官方 CodeIgniter 工作人员推荐的方式。
    【解决方案3】:

    您可以创建一个会话变量,例如 fb_data_me,并在登录后将其设置为 1,并在注销时将其设置回 0。由于它是一个会话变量,您可以从所有控制器访问。

    【讨论】:

    • 但是这里我不需要会话变量,我需要访问它,抱歉...
    • 但是在垃圾收集器完成其工作后,变量会自动取消设置
    • 是他们期望会话变量的任何其他解决方案
    • 您可以将所有会话数据存储在database
    • 它说找不到页面
    猜你喜欢
    • 1970-01-01
    • 2013-05-11
    • 2020-11-17
    • 1970-01-01
    • 2014-09-05
    • 2014-01-26
    • 2018-11-19
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多