面向对象编程Codeigniter

时间:2016-02-16 19:04:21

标签: php codeigniter oop

我正在尝试使用codeigniter通过面向对象的编程来设计网站。

我对如何创建对象实例以及在甚至不同方法的某些特定控制器中保持持久性可用有点担忧同一个控制器。

想象一下,我有一个用户类及其所有属性和方法,我想创建它的实例。知道在私有区域中该实例应该已经创建并可用,通过不同方法或控制器从私有区域访问它的最佳方式是什么?

我应该创建它的实例并从MY_private_controller继承访问吗?实例"幸存下来"或者MY_private_controller中的方法需要为我调用的每个不同方法创建一个新方法吗? 使用php实现持久化实例的最佳实践是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

假设您的控制器中的每个方法都会被调用来处理来自Web浏览器的不同请求,那么除了每次都创建User实例之外别无选择。

这是因为php应用程序生命周期是这样的:

  • 浏览器向网络服务器发送请求
  • web-server将请求转发给php
  • php运行您的输入脚本
  • 在应用程序启动的endtry脚本中
  • 应用程序处理请求并返回响应
  • 申请完成
  • web-server发回响应

因此,在每个请求中,您的应用程序都从头开始,处理请求并终止。检查PHP is meant to die

答案 1 :(得分:0)

首先从模型返回用户。您可以在任何地方执行此操作,只需将其置于if条件中,因此如果找不到该用户,则可以处理该错误。如果用户已经登录,则可以在控制器构造函数中返回用户。例如,名为Useradmin的控制器

class Useradmin extends CI_Controller {

    function __construct() {

        parent::__construct();

        $this->load->model( 'users' );

       // if we do not get a user back, then redirect to login
       if( ! $this->user = $this->users->returnActiveUser() )
       {   
        redirect("login/index") ;
       } 


    } 

所以现在$ this->用户可用于控制器中的任何方法,这些方法调用的任何模型以及加载的任何视图。您还可以更新$ this->用户,它将使用更新版本用于任何后续方法。