php 5.2.x 不被注意的细节: 数组篇
刚看了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
1、在以前的版本里面可能会说 print 需要 () ,但是 php5.2.5中已经不需要了。
echo 可以打印多个变量,print 不行
$a = "hello";
$b = "world";
echo $a,$b,"<br>";
echo $a.$b."<br>";
print $a.$b;
输出:
helloworld
helloworld
helloworld
但这样就会出现编译错误:
print $a,$b;
注意:$a $b 中间的是逗号
2、单引号跟双引号的区别:
$a = "hello";
$b = "world";
echo "$a $b";
输出:hello world
echo ''$a $b'';
输出:$a $b
还有一点要提的是像下面这样写是可以正常输出的
$arr = array("a" => 1);
echo $arr[''a''];
例子:
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
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>
<a 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)
<? |