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 相关文章推荐
3.从实例开始
Oct 09 PHP
用PHP读取IMAP邮件
Oct 09 PHP
PHP 写文本日志实现代码
May 18 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
php防止表单重复提交实例讲解
Feb 11 PHP
php数组和链表的区别总结
Sep 20 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PHP字符串与数组处理函数用法小结
Jan 07 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
web方式ftp
2006/10/09 PHP
php5 mysql分页实例代码
2008/04/10 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
信息部岗位职责
2013/11/12 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
大专生自荐书范文
2014/06/22 职场文书
银行求职自荐书
2014/06/25 职场文书
工伤事故证明
2014/10/20 职场文书
检讨书怎么写
2015/01/23 职场文书
停课通知书
2015/04/24 职场文书
2016年春节问候语
2015/11/11 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
pytorch 使用半精度模型部署的操作
2021/05/24 Python
anaconda python3.8安装后降级
2021/06/11 Python