php 5.2.x 研究:require 和 include 的不同

 更新时间:2016年11月25日 16:06  点击:1691

例子:

1、这个是 conn.php的内容:

 



<?php
    
$conn =  mysql_connect(''localhost'','''',''''); 
    
mysql_select_db(''php''); 
?>

 

2、如果这样调用:

 



 function fun($a)
     {
         
include("conn.php");
          
.......//数据库处理语句

      }

.....

fun(
"aaa");//第一次调用

.....

fun(
"bbb");//第二次调用


在第二次调用的时候会出错,但是把 include 换成 require 就不会出问题。

因为 require 文件只在读到该页面的时候调用一次,而 include 在每次调用含有 fun 的地方都调用,所以就出现了数据库连接还没关闭就再次连接的错误。

因此在循环中只要调用一次的用 require ,其他地方这两个都可以用。

 



刚看了php的教程,由于php版本的问题发现数组这边有地方可以研究
针对 php5.2.5 做了几个实验发现:

 

1、



$arr = array("a" => 1,"b" => 2,"c" => 3);

但是如果这样定义数组会报编译错误:



$arr = array("a" = 1,"b" = 2,"c" = 3);

所以定义数组的时候只能用 =>

 

2、



$arr = array("a" => 1,"b" => 2,"c" => 3);
echo $arr[0];
echo $arr[1];

打出来的是一片空白,这样才打的出来:



echo $arr["a"];

 


3、增加元素或修改元素的时候只能用 =  了,不能用 =>



$arr = array("a" => 1,"b" => 2,"c" => 3);
$arr["c"=> 6;


像这样在以前的版本中也许可以使用,但是到了 5.2.5 就会出现编译错误
增加元素或修改元素要像以下这样写:



$arr = array("a" => 1,"b" => 2,"c" => 3);
$arr["d"= 4;
$arr["c"= 6;
删除元素要使用 unset  


unset ($arr["c"]);

 

4、做个实验,猜猜这样打出来是什么:



$arr = array("a" => 1,2,"b" => 3,4);
$arr[] = 5;
foreach($arr as $key => $value)
{
    
echo "key:$key value:$value<br>";
}

 

结果:

key:a value:1
key:0 value:2
key:b value:3
key:1 value:4
key:2 value:5

这样就很明了,只有在用户没有定义键的时候 php 才会自动使用从0开始的数字作为键

 

5、php 中的数组是有指针的,可以对数组进行向前向后操作



$arr = array("a" => 1,3,"b" => 2);
//创建完数组后默认指针指在第一个元素
echo current($arr)."<br>";
//前进一个位置
echo next($arr)."<br>";
//整理的默认原则是从小到大
sort($arr);
//整理完后数组指针又停在第一个元素
echo current($arr)."<br>";
echo next($arr)."<br>";
//后退一个位置
echo prev($arr)."<br>";


输出:

1
3
1
2
1

 





<?php 
 
Class upload 
 { 
  
var $upload_name
  
var $upload_tmp_address
  
var $upload_server_name
  
var $upload_filetype ; 
  
var $file_type
  
var $file_server_address
  
var $image_w=900;  //要显示图片的宽 
  var $image_h=350;  //要显示图片的高 
  var $upload_file_size
  
var $upload_must_size= 50000//允许上传文件的大小,自己设置 
  function upload_file() 
  { 
   
$this->upload_name = $_FILES["file"]["name"];    //取得上传文件名 
   $this->upload_filetype = $_FILES["file"]["type"]; 
   
$this->upload_server_name = date("Y_m_dH_i_s").$this->upload_name; 
   
$this->upload_tmp_address = $_FILES["file"]["tmp_name"];    //取得临时地址 
   $this->file_type = array("image/gif","image/pjpeg");  //允许上传文件的类型 
   $this->upload_file_size = $_FILES["file"]["size"];  //上传文件的大小 
   if(in_array($this->upload_filetype,$this->file_type)) 
   { 
   
   
   
if($this->upload_file_size < $this->upload_must_size) 
    { 
        
echo("上传成功,谢谢支持"); 
     
$this->file_server_address = "./upload/tx/".$this->upload_server_name; 
        
move_uploaded_file($this->upload_tmp_address,$this->file_server_address);//从TEMP目录移出 
        echo("<img src=$this->file_server_address width=$this->image_w height=$this->image_h/>");  //显示图片 
     
     } 
     
else 
     { 
      
echo("文件容量太大"); 
     } 
   } 
   
else 
   { 
    
echo("不支持此文件类型,请重新选择"); 
   } 
  }  
 } 

?>

 

 



<?php

include(''./lib/wodream/image/image_upload.php''); 
 
$dd = new upload; 
 
$dd->upload_file(); 

?>

 

 



<center><form  id="form1" name="upload" enctype="multipart/form-data" method="post"  action="index.php?controler=userinfo&action=image">
上传文件: 
<br><input type="hidden" name="MAX_FILE_SIZE " /> 
<input name="file" type="file"   style="width:200;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff" size="17">
<input type="submit" name="Submit"  value="上传" style="width:30;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff" size="17"><br><br><br>
允许上传的文件类型为:jpg|jpeg|png|pjpeg|gif|bmp|x-png|swf 
<br><br>
<href="index.php">返回</a>
</form>

这是一篇介绍如何用php来实现MVC模式开发的文件。关于MVC模式的技术文章网上随处可以,所以这篇文件将不再讲述这种模式的优缺点(实际上是我说不清楚),子讲他的php技术实现。并且在以后的系列文章中也是以讲技术为主。

一、实现统一的网站入口(在MVC中调用Controler层的方法,也就是控制层)


大家也许经常在网上看到这样的路径(http://www.aaa.com/aaa/bbb/aaa?id=5),让人不解,这样的网站的实现方式有几种可能性:
    1、隐藏文件的扩展名,对这种做法的好处,众说纷纭,不过个人觉得没有必要;
    2、用了网站的重定向规则,实现虚拟路径;
    3、强制文件解析的方式,实现虚拟路径。
用第23种方法可以实现网站的统一接口,合理的整合网站,更好的体现网站的安全性和架构,用这两种方式的网站大多是使用“MVC”模式构

建和实现的。


下面是一个例子

访问路径如下:
      ....../test/*******/Bad
      ....../test/*******/Good
    (其中的"******"可以用任何字符串替换,"......."是你的web路径)

文件的目录结构如下
 |-- .htaccess
 |-- test
 |-- Application.php
 |-- Controler/GoodControler.php
 |-- Controler/BadControler.php

注意 文件".htaccess",在windows下不能直接建立的,可以在命令行模式下建立.


文件0:(.htaccess)(这个文件是更改apache的配置方式用的)
<files test>
forcetype application/x-httpd-php
</files>

文件1:(test.php)

<?php
/*-------------------------------------
 * test.php
 *
 * 作为你的网站的入口的文件
 * 用来初始化和入口
 * 调用执行Controler的调用
 *
 -------------------------------------*/
require "Application.php";
$aa = new Application();
$aa->parse();
$aa->go();

?>

文件2:(GoodControler.php)

二、抽象数据库接口(利用数据操作管理类)

在用mvc模式开发的时候,model层负责数据库的所有操作,为了对数据库的操作进行统一的管理,我们需要定义一个数据库操作管理类,由他来接替所有的数据库操作,也就是整个系统中只有这个数据库操作管理类,可以直接对数据库进行操作,如果其他的类需要对数据库进行操作,那它就必须调用和通过这个类来实现。

下面的Db类就是一个这样的类。

<?
SyntaxHighlighter.highlight();
[!--infotagslink--]

相关文章

<?php
/**************************************************************
 *        descript : mysql数据库操作管理类
 *
 *          author : 大龄青年
 *           Email :wenadmin@sina.com
 *                 qq : 303015292
 *             msn : wenguangqing@hotmail.com
 *************************************************************/
/*
 * example 1:  获取序列
 *    <?
 *    $db = new Db();
 *    $result = $db->getSeq(''art_id'', 2, 1);
 *    ?>
 */
/*
 * example 2:  分页查询
 *    <?
 *    $db = new Db();
 *    $result = $db->&queryPage(''select id,name from table'', 2, 10, DB_FETCH_ASSOC);
 *    foreach($result as $row)
 *     echo $row[''id''],''------''.$row[''name''].''<br>'';
 *    ?>
 */
/*
 * example 3:  插入数据
 *    <?
 *    $db = new Db();
 *    $result = $db->execute("insert into table (id, name) values(1,''name'')");
 *    if($result>0)     echo ''插入数据成功'';
 *    else                   echo ''插入数据失败'';
 *    ?