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动态创建Flash动画
Oct 09 PHP
php4的彩蛋
Oct 09 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
php实现随机显示图片方法汇总
May 21 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
php类的定义与继承用法实例
Jul 07 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
JS实现div居中示例
2014/04/17 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
Python grpc超时机制代码示例
2020/09/14 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
美国健康和保健平台:healtop
2020/07/02 全球购物
业务助理岗位职责
2013/11/18 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
商务助理求职信范文
2014/04/20 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
小学生暑假安全公约
2015/07/14 职场文书
利用python做数据拟合详情
2021/11/17 Python