php 5.2.x 不被注意的细节: 数组篇

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

刚看了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>
<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)

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

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • php中数组写入文件方法

    在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
<?