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 相关文章推荐
ip签名探针
Oct 09 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
PHP的博客ping服务代码
Feb 04 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
php正则表达式学习笔记
Nov 13 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 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 文件上传功能实现代码
2009/06/24 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
php简单分页类实现方法
2015/02/26 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
js获取单选按钮的数据
2006/11/27 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
python实现2048小游戏
2015/03/30 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
python系列 文件操作的代码
2019/10/06 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
网络教育自我鉴定
2013/11/01 职场文书
员工晚婚的请假条
2014/02/08 职场文书
矿泉水广告词
2014/03/20 职场文书
财产保全担保书范文
2014/04/01 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android