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 15 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
php操作xml入门之cdata区段
Jan 23 PHP
PHP获取数组最大值下标的方法
May 12 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
对php 判断http还是https,以及获得当前url的方法详解
Jan 15 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 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入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python协程的用法和例子详解
2017/09/09 Python
Python分析学校四六级过关情况
2017/11/22 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python zip()函数的使用示例
2020/09/23 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
保险经纪人求职信
2014/03/11 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
优秀班组申报材料
2014/12/25 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
朋友离别感言
2015/08/04 职场文书
自信主题班会
2015/08/14 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL
Golang流模式之grpc的四种数据流
2022/04/13 Golang