php框架CI(codeigniter)自动加载与自主创建对象操作实例分析


Posted in PHP onJune 06, 2020

本文实例讲述了php框架CI(codeigniter)自动加载与自主创建对象操作。分享给大家供大家参考,具体如下:

CI的autoload很好用,自动创建对象,但是注意,他的对象只有一个。

我们很多情况下需要生成对象,这就很麻烦。

好在我们可以有一些方法来创建。

下面记录一下使用library自定义类时,怎么使用自动加载或者用load的方法,以及自主生成任意多个实例的方法。

1、定义符合library要求的自定义类。

要定义自定义类,最好放到library,而要放到library必须将类改造成他规定的模式,大概如下:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Created by PhpStorm.
 * Date: 2018/9/28
 * Time: 21:38
 */
class TestNewInstance
{
  protected $CI;
 
  private $age = 0;
 
  public function __construct()
  {
    $this->CI =& get_instance();
  }
 
  public function setAge($age)
  {
    $this->age = $age;
  }
 
  public function getName()
  {
    $count = $this->CI->inner_model->getMaxIdVal();
    return '老王age:'.$this->age.'items_count:'.$count;
  }
 
}

2、引入

不管是什么开发语音,在使用之前都要引入。

autoload以及load的本质是什么:可能就是做了在全局(controller的基类)include+new一个实例的工作。

如果我们需要自己new实例,我们使用它的load机制也没有影响,相当于我们使用了他的include,但是他生成的实例我们没有去使用。

那么引入的方法呢?

第一种,在autoload文件里面的

$autoload['libraries']

数组添加此类,注意只要类名,区分大小写,不需要后缀php。

第二种,使用load的方法

$this->load->library('TestNewInstance');

以上2种方法,他自动会生成一个小写的testnewinstance供你调用。

以上2种方法,所获得的实例都是单例。

第三种,可以用require(require_once)或者include(include_once)来加载。

(require失败会报错,include失败不报错继续运行)
但是你通过这种方法引入进来的,并没有自动生成一个实例供你调用,你需要自己去生成。

代码如:

// 此2种方法选一即可
// 注意这里面的APPPATH实际上就是Application文件夹,因为结构是固定的
// 所以可以认为引入的时候只要替换最后面的类名即可
include (APPPATH.'libraries/TestNewInstance.php');
require_once (APPPATH.'libraries/TestNewInstance.php');

3、获得实例

如果是通过autoload或者load进来的类,已经自动生成一个小写的此类的实例变量供调用,只要用$this->xxx即可调用,在此不再赘述。

这里重点说下自主生成实例的方法。

方法一:直接在类里面添加一个静态函数,返回一个new对象,例如:

public static function getInstance()
  {
    return new TestNewInstance();
  }

使用时直接通过调用此静态函数获得:

$newInstance1 = TestNewInstance::getInstance();
$newInstance1->setAge(20);
$name1 = $newInstance1->getName();

$newInstance2 = TestNewInstance::getInstance();
$newInstance2->setAge(25);
$name2 = $newInstance2->getName();

方法二:直接调用使用new生成对象(此方法就不需要那个静态函数了):

$newInstance1 = new TestNewInstance();
$newInstance1->setAge(30);
$name1 = $newInstance1->getName();
$newInstance2 = new TestNewInstance();
$newInstance2->setAge(38);
$name2 = $newInstance2->getName();

注意,不管生成实例的方法一或者方法二,引入的时候上面的几种引入法都是通用的。

之前的文章提到使用cli调用法,这种静态函数返回实例的方法行不通,我想可能还是引入的时候出问题,以后碰到了再研究。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
php重定向的三种方法分享
Feb 22 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
php实现通过ftp上传文件
Jun 19 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 PHP
CI框架简单分页类用法示例
Jun 06 #PHP
简单的php购物车代码
Jun 05 #PHP
实例化php类时传参的方法分析
Jun 05 #PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 #PHP
PHP预定义接口――Iterator用法示例
Jun 05 #PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 #PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 #PHP
You might like
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php使用百度天气接口示例
2014/04/22 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Python性能优化技巧
2015/03/09 Python
Python使用Supervisor来管理进程的方法
2015/05/28 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
Python实现动态循环输出文字功能
2020/05/07 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
一套英文Java笔试题面试题
2016/04/21 面试题
中学生学习生活的自我评价
2013/10/26 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
正科级干部考察材料
2014/05/29 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
新闻稿件写作范文
2015/07/18 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android