php中while(list($key,$val)=each($result))详解获取数组

 更新时间:2016年11月25日 15:00  点击:1969
在php中while(list($key,$val)=each($result)) 是就读取$result数组值并循环获取数组内容赋值给$key,$val哦。

 代码如下 复制代码


echo "类CAR中的所有方法名为:";

echo "<p>";

$result=get_class_methods("CAR"); //获取类CAR中的方法名get_class_methods()

while(list($key,$val)=each($result))   //循环获取数组内容

{

  echo "方法$key=>$val";

  echo "<p>";

}

list() 函数用数组中的元素为一组变量赋值。

注意,与 array() 类似,list() 实际上是一种语言结构,不是函数

在php中define()与const()都可以定义常量,那么define()与const的区别到底在哪里呢,这个很多程序员都不明白,下面我给大家介绍一些关于此函数用法比对吧。

define()与const的区别:

define() 在执行期定义常量,而 const 在编译期定义常量。这样 const 就有轻微的速度优势(即性能稍微好点),但不值得考虑这个问题,除非你在构建大高并发系统。

define() 将常量放入全局作用域,即使在命名空间中使用define方法定义常量也属于全局作用域的。不能使用 define() 定义类常量(类常量使用const定义),命名空间作用域内的常量使用const定义如: namespace const ABC=’100′;。

define() 允许你在常量名和常量值中使用表达式,而 const 则都不允许。 这使得 define() 更加灵活。
define() 可以在 if() 代码块中调用,但 const 不行。

在同一作用域下,define()常量名和const定义的常量名不能相同.
const可以定义类常量和命名空间常量. 如

namespace abc; const ABC = ‘a’; class hello { const C_NUM = 8; }

 代码如下 复制代码

if (...) {
    const FOO = 'BAR';    // invalid
}
 
but
 
if (...) {
    define('FOO', 'BAR'); // valid
}

4、const采用一个普通的常量名称,define可以采用表达式作为名称。

 代码如下 复制代码


const  FOO = 'BAR';
 
for ($i = 0; $i < 32; ++$i) {
    define('BIT_' . $i, 1 << $i);
}

5、const只能接受静态的标量,而define可以采用任何表达式。

 代码如下 复制代码

const BIT_5 = 1 << 5;    // invalid
 
but
 
define('BIT_5', 1 << 5); // valid

6、const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量

 代码如下 复制代码

define('FOO', 'BAR', true);  www.111cn.net

echo FOO; // BAR
echo foo; // BAR

总结:
使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

变量作用域就是一个变量在页面与函数之间可不可以相互使用,它的作用范围在哪里,下面小编来给大家介绍php变量使用域的一些学习笔记拿出来与大家交流一下。

在php当中变量的作用范围php手册上是这样描述的

在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:

 代码如下 复制代码

<?php
$a = 1; /* global scope */

function Test()
{
   echo $a; /* reference to local scope variable */
}

Test();
?>

这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖,上面开个头,下面我来来详细介绍


在PHP中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等.

■内置超级全局变量可以在脚本的任何地方使用和可见。即如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。
■常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面中就不能使用了。
■在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。
■函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。
■在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。
■在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
超级全局变量的完整列表如下:

■.$GOBALS 所有全局变量数组
■.$_SERVER 服务器环境变量数组
■.$_POST 通过POST方法传递给该脚本的变量数组
■.$_GET 通过GET方法传递给该脚本的变量数组
■.$_COOKIE cookie变量数组
■.$_FILES 与文件上传相关的变量数组
■.$ENV 环境变量数组
■.$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE 所包含的输入内容
■.$_SESSION 会话变量数组


1、局部变量

在函数中声明的变量认为是局部变量,即它只能在该函数中引用。如果在函数外复制,讲被认为是完全不同的另一个变量(即不同于函数中所包含的那个变量)。注意,退出声明变量的函数时,变量及其相应的值就会撤销。

 代码如下 复制代码

$x=4;

function assignx(){

$x=0;

printf("$x inside function is %d <br/>",$x);

}

assignx();

printf("$x outside of function is %d <br/>",$x);

 
执行结果为

$ inside function is 0

$ outside of function is 4

2、函数参数

PHP和其他编程语言一样,任何接受参数的函数都必须在函数首部中声明这些参数。虽然这些参数(值参数)接受函数外部的值,但退出函数后就无法再访问这些参数。

 

 代码如下 复制代码

function x10($value){
$value=

$value=$value*10

return $value;

}

记住,虽然在声明参数的函数内部可以访问和出力这些函数参数,但当函数执行结束时,参数就会撤销。

3、全局变量

全局变量可以在程序的任何地方访问。但是,为了修改一个全局变量,必须要修改该变量的函数中将其显式地声明为全局变量。只要在变量前面加上关键字GLOBAL,就是全局变量。如果将GLOBA关键字放在一个已有的变量前面,则是告诉PHP姚使用同名的变量。


使用 $GLOBALS 替代 global

 代码如下 复制代码

 

<?php
$a = 1;
$b = 2;
function Sum()
{
   $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
?>


在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:
例子 12-3. 演示超全局变量和作用域的例子

 代码如下 复制代码

 

<?php
function test_global()
{
   // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。
   global $HTTP_POST_VARS;
   print $HTTP_POST_VARS['name'];
   // Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。
   print $_POST['name'];
}
?>


使用静态变量

变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:
例子 12-4. 演示需要静态变量的例子

 代码如下 复制代码

 

<?php
function Test ()
{
   $a = 0;
   echo $a;
   $a++;
}
?>


本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:
例子 12-5. 使用静态变量的例子

 

<?php
function Test()
{
   static $a = 0;
   echo $a;
   $a++;
}
?>

 


现在,每次调用 Test() 函数都会输出 $a 的值并加一。
静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:
例子 12-6. 静态变量与递归函数

 代码如下 复制代码

 

<?php
function Test()
{
   static $count = 0;
   $count++;
   echo $count;
   if ($count < 10) {
   Test ();
   }
   $count--;
}
?>


注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。
例子 12-7. 声明静态变量

 代码如下 复制代码

 

<?php
function foo(){
   static $int = 0; // correct
   static $int = 1+2; // wrong (as it is an expression)
   static $int = sqrt(121); // wrong (as it is an expression too)
   $int++;
   echo $int;
}
?>

注意有朋友问我全局静态变量 ,在php中没有全局变量这一说活

php是一种解释型的语言,虽然有static修饰符,但意思与.Net中的完全不一样。
即使把类中的一个变量声明为static,这个变量也只在当前页面级的应用程序域中有效。

2、理解变量作用域。

  在方法体外声明的变量,在方法体内是访问不到的。
 如:

 代码如下 复制代码

 

<?php  
  $url = "www.111cn.net";  
  function _DisplayUrl()  
  {  
      echo $url;  
  }  
  function DisplayUrl()  
  {  
    global $url;  
    echo $url;  
  }  
  _DisplayUrl();  
  DisplayUrl();  
?> 

<?php
  $url = "www.111cn.net";
  function _DisplayUrl()
  {
      echo $url;
  }
  function DisplayUrl()
  {
    global $url;
    echo $url;
  }
  _DisplayUrl();
  DisplayUrl();
?>

_DisplayUrl方法是不会显示任何结果,因为变量$url在方法体_DisplayUrl中是无法访问的,在$url前加上global即可,如DisplayUrl方法。

在方法体中定义的global变量可以在方法体外访问:

 代码如下 复制代码


<?php  
  function _DisplayUrl()  
  {  
      global $myName;  
      $myName='yibin';  
  }  
    
  _DisplayUrl();  
  echo $myName;  //output yibin  
?> 

引用:意思是将原始对象在内存中的地址传递给目标对象,就相当于原始对象和目标对象指向的是同一个内存地址。此时,如果对目标对象或者原始对象进行修改,内存中的数据也会改变。

所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。

所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。

传值的话,如果是非对象,会传一个值的拷贝,对这个变量做任何改动都不影响原值。传引用或者传对象,是传真实的内存地址,对这个变量做的改动会影响原值。

 代码如下 复制代码

 

function func1($a)

{ $a = $a + 1; }

 function func2(&$a)

{ $a = $a + 1; }

$sample = 1;

func1($sample);

echo $sample; // 输出 1

$sample = 1;

func2($sample);

9.echo $sample; // 输出 2

总结

在高中时老师告诉我们引用就是把内存地址给变量这样只要内存地址中发生变化而我们所财会的变量内容也会跟着变了,这个就有点像一个房子放了东西,我们都可以进入拿,只要东西变了我们进去看到的东西是一样的,而不是我把东西拿在手上,这样房里东西变了我这里不变了。

本文章来给各位同学介绍php控制页面浏览器缓存与启用gzip传送页面方法,希望此代码对各位同这会有所帮助,同时没有服务器权限的朋友可这样来实现服务器gzip页面传输。

php实例gzip传输页面

 代码如下 复制代码

可以用于静态资源与html页面,修改一下也适合于其他语言

//缓存过期时间(Cache-Control, http1.1协义), 推荐使用
$secs = 0; //秒
header("Cache-Control: s-maxage=$secs, max-age=$secs, must-revalidate, proxy-revalidate");

// 缓存过期时间为24小时(Expires)
$offset = 3600 * 24;
$expire = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
Header($expire); 

//Last-Modified, 最后修改的时间
$gmt_mtime = gmdate('D, d M Y H:i:s', time() ) . ' GMT';
header("Last-Modified: " . $gmt_mtime );   

//启用gzip压缩
ob_start();
    ... your php code ...
    ... your php code ...
    ... your php code ...
    header('Content-Length: ' . ob_get_length());
ob_end_flush();   

如果你有服务器权限可参考apache开启gzip传输


一,找到你的httpd.conf文件,打开找到如下

LoadModule deflate_module modules/mod_deflate.so

把前面的#去了,因为mod_deflate.so模块默认是关闭的,好了下面一下

二,把现面代码放到你httpd.conf文件最后面就好了。

 代码如下 复制代码

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
DeflateCompressionLevel 5
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript
</IfModule>

重启你的apache就KO了

iis开启gzip页面传输

1. 打开Internet信息服务(IIS)管理器,右击“网站”-》“属性”,选择“服务”。在“HTTP压缩”框中选中“压缩应用程序文件”和“压缩静态文件”,按需要设置“临时目录”和“临时目录的最大限制”;

2. 在Internet信息服务(IIS)管理器,右击“Web服务扩展”-》“增加一个新的Web服务扩展。。.”,在“新建Web服务扩展”框中输入扩展名“HTTP Compression”,添加“要求的文件”为C:WINDOWSsystem32inetsrvgzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中“设置扩展状态为允许”;

3. 使用文本编辑器打开C:WindowsSystem32inetsrvMetaBase.xml(建议先备份),

找到Location =“/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩,

找到Location =”/LM/W3SVC/Filters/Compression/deflate“用于设置deflate压缩。 上面两个节点紧挨着。并且设置的属性相同。

如果需要压缩动态文件,则将HcDoDynamicCompression设置为”TRUE“,

并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;

如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为”TRUE“,

并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;

HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数值在0-10, 默认为0。

HcDynamicCompressionLevel属性说明:HcDynamicCompressionLevel Metabase Property

HcOnDemandCompLevel 属性说明:HcOnDemandCompLevel Metabase Property

说明: 这两个属性值一般推荐设置为9, 具有最佳性价比。

注意

1. 在编辑MetaBase.xml前需要停止IIS,可以使用 net stop iisadmin

2. 修改完成后开启iisadmin服务,并执行iisreset命令

关于SEO的测试

压缩是否对SEO有影响,经测试,开启后仍然可以被很好的收录。

关于对SEO影响的研究文章,还可以参考下面的几篇文章。

具体的效率问题,将继续监控以作研究

[!--infotagslink--]

相关文章

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

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • php数组操作 键名比较 差集 交集赋值

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

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#数组的常用操作方法小结

    Array数组在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
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • C# 拷贝数组的几种方法(总结)

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

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

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • C#中while循环语句用法实例详解

    这篇文章主要介绍了C#中while循环语句用法,以实例形式详细分析了while语句的用法,并对return,continue,break的区别做了进一步的分析,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

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

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#读取文件所有行到数组的方法

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