本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

php框架CI(codeigniter)自动加载与自主创建对象操作实例分析的更多相关文章

  1. Swift使用CG和CI framework画棋盘

    一方面我们可以直接用CoreImage框架画棋盘,代码如下:效果如下:如果各位亲懒得想复杂(复杂么?代码很直接没啥好说的,不过倒数第二句值得提及一下.有些过滤器是不需要inputimage的,这种过滤器产生的结果图像往往面积是”无限”大小的,为了截取我们需要的图像我们需要在生成CGImage时设定实际所需的大小.以下使用过滤器画的棋盘:你可能会发现黑白格子次序和前一个绘制的不一样.解决也非常简单,把inputColor0和inputColor1的颜色对调一下即可!

  2. 特拉维斯| Android:平台工具v26.0.2无法安装

    10月26日,我的TravisCI构建突然失败,所提到的解决方法都没有为我工作(如https://github.com/travis-ci/travis-ci/issues/6193).我的皮棉报告中报告了确切的问题:SDK平台工具版本(23.0.1)太旧了,无法检查使用API25编译的API;请更新这是特拉维斯工作的日志:https://api.travis-ci.org/jobs/294869

  3. android – Viewpager Relex Circle指示灯颜色

    viewpager指示器的默认颜色为白色.在github中的relexviewpager指示器中,它不包括如何更改指标的颜色.可能吗?解决方法我不在乎你做什么填充或保证金但创建一个可绘制的XML文件并添加这些代码把它称之为你想要的但是用为我工作

  4. CodeIgniter辅助函数helper详解

    这篇文章主要介绍了CodeIgniter辅助函数helper,需要的朋友可以参考下

  5. javaScript和jQuery自动加载简单代码实现方法

    给大家介绍一下利用javaScript和jQuery实现自动加载最简单的代码写法。

  6. PHP CodeIgniter分页实例及多条件查询解决方案(推荐)

    这篇文章主要介绍了PHP CodeIgniter分页实例及多条件查询的思路详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  7. PHP中类的自动加载的方法

    本篇文章主要介绍了PHP中类的自动加载的方法。类的自动加载是指在外面的页面中并不需要去“引入”类文件,但是程序会在需要的时候动态加载需要的类文件。

  8. PHP MVC框架中类的自动加载机制实例分析

    这篇文章主要介绍了PHP MVC框架中类的自动加载机制,结合实例形式分析了MVC框架中类的自动加载机制原理、实现方法及相关操作注意事项,需要的朋友可以参考下

  9. AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法

    这篇文章主要介绍了AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法,结合实例形式分析了ng-app自动加载我们自定义的模块作为根模块的操作步骤与实现技巧,需要的朋友可以参考下

  10. php基于CodeIgniter实现图片上传、剪切功能

    这篇文章主要为大家详细介绍了php基于CodeIgniter实现图片上传、剪切功能,具有参考价值,感兴趣的朋友可以参考一下

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部