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 相关文章推荐
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
Laravel框架集合用法实例浅析
May 14 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
php构造函数实例讲解
2013/11/13 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
使用js画图之画切线
2015/01/12 Javascript
JavaScript入门基础
2015/08/12 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
js实现漫天星星效果
2017/01/19 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
Python中itertools模块用法详解
2014/09/25 Python
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python实现画一颗树和一片森林
2018/06/25 Python
python批量修改图片大小的方法
2018/07/24 Python
python通过zabbix api获取主机
2018/09/17 Python
python and or用法详解
2019/06/26 Python
python 读取修改pcap包的例子
2019/07/23 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
护理专业本科生自荐信
2013/10/01 职场文书
办公室文秘岗位职责
2013/11/15 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
营业员岗位职责范本
2015/04/14 职场文书