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 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 PHP
php创建sprite
Feb 11 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
php简单操作mysql数据库的类
Apr 16 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
解决laravel资源加载路径设置的问题
Oct 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
打造计数器DIY三步曲(下)
2006/10/09 PHP
ajax php 实现写入数据库
2009/09/02 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
Jquery性能优化详解
2014/05/15 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
python中while循环语句用法简单实例
2015/05/07 Python
Saltstack快速入门简单汇总
2016/03/01 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python 异或加密字符串的实例
2018/10/14 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
预备党员的自我评价
2014/03/12 职场文书
学期个人工作总结
2015/02/13 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js