国产啪视频1000部免费视频_本年度最佳→偷自拍日韩精品蜜月_亚洲尤物在线观看_成人国产精品视频网站_亚洲成a人片在线观_天天看片在线无码免费_免费日韩一区二区_国产精品久久亚洲高潮野花社喷水_再深点灬舒服灬太大了av_中文字幕无码一级麻豆精品国产综合.

php框架CI(codeigniter)自動加載與自主創(chuàng)建對象操作實例分析

發(fā)布時間:2020-08-13 17:47:21

本文實例講述了php框架CI(codeigniter)自動加載與自主創(chuàng)建對象操作。分享給大家供大家參考,具體如下:

CI的autoload很好用,自動創(chuàng)建對象,但是注意,他的對象只有一個。

我們很多情況下需要生成對象,這就很麻煩。

好在我們可以有一些方法來創(chuàng)建。

下面記錄一下使用library自定義類時,怎么使用自動加載或者用load的方法,以及自主生成任意多個實例的方法。

1、定義符合library要求的自定義類。

要定義自定義類,最好放到library,而要放到library必須將類改造成他規(guī)定的模式,大概如下:


<?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、引入

不管是什么開發(fā)語音,在使用之前都要引入。

autoload以及l(fā)oad的本質(zhì)是什么:可能就是做了在全局(controller的基類)include+new一個實例的工作。

如果我們需要自己new實例,我們使用它的load機制也沒有影響,相當于我們使用了他的include,但是他生成的實例我們沒有去使用。

那么引入的方法呢?

第一種,在autoload文件里面的


$autoload['libraries']

數(shù)組添加此類,注意只要類名,區(qū)分大小寫,不需要后綴php。

第二種,使用load的方法


$this->load->library('TestNewInstance');

以上2種方法,他自動會生成一個小寫的testnewinstance供你調(diào)用。

以上2種方法,所獲得的實例都是單例。

第三種,可以用require(require_once)或者include(include_once)來加載。

(require失敗會報錯,include失敗不報錯繼續(xù)運行)
但是你通過這種方法引入進來的,并沒有自動生成一個實例供你調(diào)用,你需要自己去生成。

代碼如:


// 此2種方法選一即可
// 注意這里面的APPPATH實際上就是Application文件夾,因為結(jié)構(gòu)是固定的
// 所以可以認為引入的時候只要替換最后面的類名即可
include (APPPATH.'libraries/TestNewInstance.php');
require_once (APPPATH.'libraries/TestNewInstance.php');

3、獲得實例

如果是通過autoload或者load進來的類,已經(jīng)自動生成一個小寫的此類的實例變量供調(diào)用,只要用$this->xxx即可調(diào)用,在此不再贅述。

這里重點說下自主生成實例的方法。

方法一:直接在類里面添加一個靜態(tài)函數(shù),返回一個new對象,例如:


 public static function getInstance()
 {
   return new TestNewInstance();
 }

使用時直接通過調(diào)用此靜態(tài)函數(shù)獲得:


$newInstance1 = TestNewInstance::getInstance();
$newInstance1->setAge(20);
$name1 = $newInstance1->getName();

$newInstance2 = TestNewInstance::getInstance();
$newInstance2->setAge(25);
$name2 = $newInstance2->getName();

方法二:直接調(diào)用使用new生成對象(此方法就不需要那個靜態(tài)函數(shù)了):


$newInstance1 = new TestNewInstance();
$newInstance1->setAge(30);
$name1 = $newInstance1->getName();
$newInstance2 = new TestNewInstance();
$newInstance2->setAge(38);
$name2 = $newInstance2->getName();

注意,不管生成實例的方法一或者方法二,引入的時候上面的幾種引入法都是通用的。

之前的文章提到使用cli調(diào)用法,這種靜態(tài)函數(shù)返回實例的方法行不通,我想可能還是引入的時候出問題,以后碰到了再研究。


服務(wù)熱線:4006068008 0531-85860101 15589999555郵箱:zlxk@zlxk.com地址:山東省濟南市高新區(qū)鑫盛大廈2號樓24層

Copyright 2023,ALL Rights Reserved zlxk.com | | (c) Copyright 2024版權(quán)所有 魯ICP備20032954號-1網(wǎng)站地圖