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 相关文章推荐
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
php str_replace的替换漏洞
Mar 15 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
php使用codebase生成随机数
Mar 25 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
php中return的用法实例分析
Feb 28 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
详解php与ethereum客户端交互
Apr 28 PHP
php实现文章评论系统
Feb 18 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
Vue响应式原理详解
2017/04/18 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
对python中UDP,socket的使用详解
2019/08/22 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
如何验证python安装成功
2020/07/06 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
历史学专业推荐信
2013/11/06 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
庆六一活动总结
2014/08/29 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python