php中变量作用域和超级全局变量介绍

 更新时间:2016年11月25日 15:09  点击:2001

一、变量的赋值

变量声明后就可以给其赋值,有两种方式:值赋值和引用赋值。
1、值赋值
$color = "red" ;
$sum = 12+"15" ; /* $sum = 27 */

2、 若希望两个变量指向一个值的同一个副本,则需要通过引用赋值。
引用赋值
所创建的变量与另一个变量引用的内容相同,如果多个变量引用了同一个内容,修改其中任意一个变量,在其余的变量上都将有所反映。
例子:
<?php教程
$value1 = "hello" ;
$value2 = &value1 ; /*$value1 and $value2 both equal "hello" .*/
$value2 = "goodbye" ; /*$value1 and $value2 both equeal "goodbye". */
?>

二、变量的作用域
php脚本的任何位置都可以声明变量,但声明变量的位置会大大影响访问变量的范围。这个可访问的范围称为作用域(scope)。
php变量的4中作用域:
△ 局部变量
△ 函数参数
△ 全局变量
△ 静态变量
1、局部变量
在函数中声明的变量认为是局部变量,只能在函数中引用,退出声明变量的函数时,该变量及相应的值就会撤销。消除了导致全局访问的变量被有意或无意修改的可能性。

$x = 4 ;
function assignx ( ) {
$x = 0 ;
print "$x inside function is $x . <br>" ;
}
assignx ( ) ;
print "$x outside of function is $x . <br>" ;
代码的执行结果为:
$x inside function is 0 .
$x outside function is 4 .

2、函数参数
php和其他编程语言一样,任何接受参数的函数都必须在函数首部中声明这些参数。虽然这些参数接受函数外部的值,但退出函数后就无法再访问这些参数。(按引用传递的参数除外)
例如:
function x10 ( $value ) {
$value = $value * 10 ;
return $value ;
}
函数执行完毕,参数即将撤销。

3、全局变量
与局部变量相反,全局变量可以在程序的任何位置访问。当在函数中改变全局变量时,需要在该函数中将变量显示地生命为全局变量,只要在函数中的该变量前加上global即可。
例如:
$somevar = 15 ;
function addit ( ) {
global $somevar ;
$somevar ++ ;
print "somevar is $somevar" ;
}
addit ( ) ;
$somevar 显示的值应为16 ,但是,若去掉 global $somevar ; 这行,变量$somevar 将被隐含的设置为0,再加1 ,最后显示的值就是1 。
声明全局变量的另一方法是使用php的$global数组,如下:
$somevar = 15 ;
function addit ( ) {
$globals[ 'somevar' ]++ ;
}
addit ( ) ;
print "somevar is ". $globals[ 'somevar' ] ;
返回值如下: somevar is 16 .

4、静态变量
静态(static)作用域。普通变量的函数参数在函数结束时会撤销,但静态变量在函数退出时不会丢失值,并且再次调用此函数时还能保留这个值。在汴梁明前加上关键字 static 就可以声明一个静态变量。
static $somevar ;
考虑一个例子:
function keep_track ( ) {
static $count = 0 ;
$count ++ ;
print $count ;
print "<br>" ;
}
keep_track ( ) ;
keep_track ( ) ;
keep_track ( ) ;
keep_track ( ) ;
若$count 没有被指明为静态(相应的,$count就是一个局部变量),输出将会是
1
1
1
1
因为$count是静态的,它会在每次执行函数时保留前面的值。输出如下:
1
2
3
4
静态作用域对于递归函数很有用。递归函数(recursive function)是一个功能强大的编程概念,它是一个可以重复调用自身的函数,直到满足某个条件为止。

5、 php的超级全局变量
php提供了很多有用的预定义变量,可以在执行脚本的人和位置访问,用于提供大量与环境有关的信息。可以通过这些变量获得关于当前用户会话、用户操作系统环境和本地操作环境等详细信息。php会创建部分变量,而其他许多变量的可用性和值则取决于操作系统和web服务。

输出所有预定义变量:
foreach ( $_server as $var => $value ) {
echo "$var => $value <br>" ;
}
显示用户的ip地址:
print "hi!your ip address is ".$_server[ ' remote_addr' ] ;

 

使用substr_count()函数检索字符出现的次数
    获取指定字符在字符串中出现的次数
    语法:substr_count(haystack,needle)
    使用substr_count()函数获取特定字符在字符串中出现的次数实例如下:

 <?php教程
echo substr_count(“zero的php自学手册”,”的”);
echo “<br>”;
echo substr_count(“www.111cn.net”,”o”);
echo “<br>”;
echo substr_count(“1033114118′,”1′);
?>

实例结果:
1
2
5

参数 描述
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 可选。规定在字符串中何处开始搜索。
charlist 可选。规定搜索的长度。

1、 使用 print_r ( $array/$var )

print_r()函数 ,只用于输出数组。

php教程 中 print_r 函数输出的数组内容不排列。为了让它输出的好看些。如,数组有多层。分段列出,我们可以这样写:

echo "<pre>";
print_r xxxxx;
echo "<pre>";

print 是打印的意思,而r则取自array的单词,那么该函数的功能就是打印数组内容,它既可以打印数组内容,也可以打印普通的变量。
print_r ($_request) ;
print_r ($_get) ; /* 打印使用get方法传递的表单内容*/
print_r($_post) ; /* 打印使用表单post方法传递过的数组内容*/

2、 使用 var_dump ($object/$array/$var)
var_dump -- 打印变量的相关信息
描述

void var_dump ( mixed expression [, mixed expression [, ...]])


此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

提示: 为了防止程序直接将结果输出到浏览器,您可以使用输出控制函数(output-controlfunctions)来捕获函数的输出,并把它们保存到一个 string 型的变量中。
 
var_dump($db) ; /*打印$db数据库教程连接对象的内容*/
var_dump($filehandle) ; /*打印文件句柄对象的内容*/
var_dump($smarty) ; /*打印smarty模板对象*/

3、 使用 var_export($object/$array/$var)
mixed var_export ( mixed expression [, bool return])


此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 php 代码。

您可以通过将函数的第二个参数设置为 true,从而返回变量的表示。

比较 var_export() 和 var_dump().


例如:
复制代码 代码如下:
<?php
$a = array ( 1,2, array("a","b","c")) ;
var_export ($a) ;
echo "<br>" ;
$v = var_export ( $a , true) ;
echo $v ;
?>

上例中,$v = var_export ( $a , true) 表示返回的是php的源代码,可以直接用php脚本的数组文件中。
相关说明:
以上三个函数都可以打印对象的值、系统函数值以及数组的内容;
 echo 、print、printf可以打印变量内容,但不能显示数组及系统超级变量数组;
 print_r 和 var_dump不仅可以打印数组、标量变量,还可以打印对象的内容;
 var_dump语句不仅能打印变量、数组内容,还可以显示布尔变量和资源(resource)的内容;
 var_export 函数返回关于传递给该函数的变量的结构信息,和 var_dump()函数类似,不同的是其返回的内容是合法的php代码。

任何 php教程 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,甚至一个什么也不做的(空语句)条件语句。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。本章讲述了各种语句类型。

if
if 结构是很多语言包括 php 在内最重要的特性之一,它允许按照条件执行代码片段。php 的 if 结构和 c 语言相似:


if (expr)
    statement


 

 

如同在表达式一章中定义的,expr 按照布尔求值。如果 expr 的值为 true,php 将执行 statement,如果值为 false - 将忽略 statement。有关哪些值被视为 false 的更多信息参见“转换为布尔值”一节。

如果 $a 大于 $b,则以下例子将显示 a is bigger than b:


<?php
if ($a > $b)
   print "a is bigger than b";
?> 

经常需要按照条件执行不止一条语句,当然并不需要给每条语句都加上一个 if 子句。可以将这些语句放入语句组中。例如,如果 $a 大于 $b,以下代码将显示 a is bigger than b 并且将 $a 的值赋给 $b:

 

<?php
if ($a > $b) {
   print "a is bigger than b";
   $b = $a;
}
?> 

 

if 语句可以无限层地嵌套在其它 if 语句中,这给程序的不同部分的条件执行提供了充分的弹性。


else
经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其它语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if 语句中的表达式的值为 false 时执行语句。例如以下代码在 $a 大于 $b 时显示 a is bigger than b,反之则显示 a is not bigger than b:


<?php
if ($a > $b) {
   print "a is bigger than b";
} else {
   print "a is not bigger than b";
}
?> 


else 语句仅在 if 以及 elseif(如果有的话)语句中的表达式的值为 false 时执行(参见 elseif)。

 

elseif
elseif,和此名称暗示的一样,是 if 和 else 的组合。和 else 一样,它延伸了 if 语句,可以在原来的 if 表达式值为 false 时执行不同语句。但是和 else 不一样的是,它仅在 elseif 的条件表达式值为 true 时执行语句。例如以下代码将根据条件分别显示 a is bigger than b,a equal to b 或者 a is smaller than b:

 

<?php
if ($a > $b) {
   print "a is bigger than b";
} elseif ($a == $b) {
   print "a is equal to b";
} else {
   print "a is smaller than b";
}
?> 

 

在同一个 if 结构中可以有多个 elseif 语句。第一个表达式值为 true 的 elseif 语句(如果有的话)将会执行。在 php 中,也可以写成“else if”(两个单词),它和“elseif”(一个单词)的行为完全一样。句法分析的含义有少许区别(如果你熟悉 c 语言的话,这是同样的行为),但是底线是两者会产生完全一样的行为。

elseif 的语句仅在之前的 if 或 elseif 的表达式值为 false,而当前的 elseif 表达式值为 true 时执行。


else
经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其它语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if 语句中的表达式的值为 false 时执行语句。例如以下代码在 $a 大于 $b 时显示 a is bigger than b,反之则显示 a is not bigger than b:


<?php
if ($a > $b) {
   print "a is bigger than b";
} else {
   print "a is not bigger than b";
}
?> 


else 语句仅在 if 以及 elseif(如果有的话)语句中的表达式的值为 false 时执行(参见 elseif)。

foreach

php教程 4(不是 php 3)包括了 foreach 结构,和 perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。


foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement


 

 

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量 $key。


注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

 

注: 此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。

 

注: foreach 不支持用“@”来禁止错误信息的能力。


你可能注意到了以下的代码功能完全相同:


<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
   echo "value: $value<br>n";
}

foreach ($arr as $value) {
   echo "value: $value<br>n";
}
?> 


以下代码功能也完全相同:

<?php
reset ($arr);
while (list($key, $value) = each ($arr)) {
   echo "key: $key; value: $value<br>n";
}

foreach ($arr as $key => $value) {
   echo "key: $key; value: $value<br>n";
}
?> 

 

示范用法的更多例子:

 

<?php
/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
   print "current value of $a: $v.n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach ($a as $v) {
   print "$a[$i] => $v.n";
   $i++;
}

/* foreach example 3: key and value */

$a = array (
   "one" => 1,
   "two" => 2,
   "three" => 3,
   "seventeen" => 17
);

foreach ($a as $k => $v) {
   print "$a[$k] => $v.n";
}

/* foreach example 4: multi-dimensional arrays */

$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
   foreach ($v1 as $v2) {
       print "$v2n";
   }
}

/* foreach example 5: dynamic arrays */

foreach (array(1, 2, 3, 4, 5) as $v) {
   print "$vn";
}
?> 


for
for 循环是 php 中最复杂的循环结构。它的行为和 c 语言的相似。 for 循环的语法是:

 

for (expr1; expr2; expr3) statement


 

 

第一个表达式(expr1)在循环开始前无条件求值一次。

expr2 在每次循环开始前求值。如果值为 true,则继续循环,执行嵌套的循环语句。如果值为 false,则终止循环。

expr3 在每次循环之后被求值(执行)。

每个表达式都可以为空。expr2 为空意味着将无限循环下去(和 c 一样,php 认为其值为 true)。这可能不想你想象中那样没有用,因为你经常会希望用 break 语句来结束循环而不是用 for 的表达式真值判断。

考虑以下的例子。它们都显示数字 1 到 10:

 

<?php
/* example 1 */

for ($i = 1; $i <= 10; $i++) {
   print $i;
}

/* example 2 */

for ($i = 1; ; $i++) {
   if ($i > 10) {
       break;
   }
   print $i;
}

/* example 3 */

$i = 1;
for (;;) {
   if ($i > 10) {
       break;
   }
   print $i;
   $i++;
}

/* example 4 */

for ($i = 1; $i <= 10; print $i, $i++);
?> 

当然,第一个例子看上去最正常(或者第四个),但你可能会发现在 for 循环中用空的表达式在很多场合下会很方便。

php 也支持用冒号的 for 循环的替代语法。

 

for (expr1; expr2; expr3): statement; ...; endfor;


 

 

其它语言具有 foreach 语句来遍历数组或散列表,php 也行(见 foreach)。在 php 3 中,可以结合 list() 和 each() 函数用 while 循环来达到同样效果。例子见这些函数的文档。


do..while
do..while 和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和正规的 while 循环主要的区别是 do..while 的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在正规的 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 false 则整个循环立即终止)。

do..while 循环只有一种语法:


<?php
$i = 0;
do {
   print $i;
} while ($i > 0);
?> 

 

以上循环将正好运行一次,因为经过第一次循环后,当检查表达式的真值时,其值为 false($i 不大于 0)而导致循环终止。

资深的 c 语言用户可能熟悉另一种不同的 do..while 循环用法,把语句放在 do..while(0) 之中,在循环内部用 break 语句来结束执行循环。以下代码片段示范了此方法:

 

<?php
do {
   if ($i < 5) {
       print "i is not big enough";
       break;
   }
   $i *= $factor;
   if ($i < $minimum_limit) {
       break;
   }
   print "i is ok";

   /* process i */

} while(0);
?> 

如果你还不能立刻理解也不用担心。即使不用此“特性”你也照样可以写出强大的代码来。


while
while 循环是 php 中最简单的循环类型。它和 c 语言中的 while 表现得一样。while 语句的基本格式是:

 

while (expr) statement


 

 

while 语句的含意很简单,它告诉 php 只要while 表达式的值为 true 就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 false,则循环语句一次都不会执行。

和 if 语句一样,可以在 while 循环中用花括号括起一个语句组,或者用替代语法:

 

while (expr): statement ... endwhile;


 

 

下面两个例子完全一样,都显示数字 1 到 10:

 

<?php
/* example 1 */

$i = 1;
while ($i <= 10) {
   print $i++;  /* the printed value would be
                   $i before the increment
                   (post-increment) */
}

/* example 2 */

$i = 1;
while ($i <= 10):
   print $i;
   $i++;
endwhile;
?> 

[!--infotagslink--]

相关文章

  • node.js 全局变量的具体使用

    这篇文章主要介绍了node.js 全局变量的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-15
  • python基础之局部变量和全局变量

    这篇文章主要介绍了python局部变量和全局变量,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下...2021-10-22
  • Angularjs全局变量被作用域监听的正确姿势

    这篇文章主要介绍了Angularjs全局变量被作用域监听的正确姿势的相关资料,需要的朋友可以参考下...2016-02-12
  • php 全局变量global

    php 全局变量global “global”关键字的演示例子: 以下为引用的内容: 以下为引用的内容: <?php $my_var = 'Hello World'; test_global(); function test_global...2016-11-25
  • C语言 全局变量和局部变量详解及实例

    这篇文章主要介绍了C语言 全局变量和局部变量详解及实例的相关资料,需要的朋友可以参考下...2020-04-25
  • 在Unity中使用全局变量的操作

    这篇文章主要介绍了在Unity中使用全局变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-14
  • static全局变量与普通的全局变量的区别详细解析

    以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-04-25
  • PHP中全局变量global详解

    本文章来详细的介绍关于PHP中全局变量global的方法,有需要了解global函数使用方法的朋友可参考本文章。 变量的范围即它定义的上下文背景(也就是它的生效范围)。大部...2016-11-25
  • php 全局变量global的使用方法

    全局变量和“global”关键字 PHP默认定义了一些“超级全局(Superglobals)”变量,这些变量自动全局化,而且能够在 程序的任何地方中调用,比如$_GET和$ _...2016-11-25
  • 深入uCOS中全局变量的使用详解

    本篇文章是对uCOS中全局变量的使用进行了详细的分析介绍,需要的朋友参考下...2020-04-25
  • JS全局变量和局部变量最新解析

    这篇文章主要介绍了JS全局变量和局部变量最新解析的相关知识,本文给给大家补充js删除局部变量的代码,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-07-01
  • TENSORFLOW变量作用域(VARIABLE SCOPE)

    这篇文章主要介绍了TENSORFLOW变量作用域(VARIABLE SCOPE),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-27
  • Python中的全局变量如何理解

    在本篇文章里小编给大家整理的是关于Python中全局变量详解内容,需要的朋友们可以参考下。...2020-06-05
  • php数组声明,遍历,数组全局变量

    php教程数组声明,遍历,数组全局变量 <?php /* * 一、数组的概述 * 1.数组的本质:管理和操作一组变量,成批处理 * 2.数组时复合类型(可以存储多个) * 3.数组中可...2016-11-25
  • PHP Global定义全局变量使用说明

    Global是php中一个比较特殊的命令,大家直接叫他超级全局变量了,下面我来介绍我今天在使用Global定义全局学习笔记了。 很不习惯PHP中的变量作用域,PHP中函数变量和...2016-11-25
  • php 变量作用域学习笔记分享

    变量作用域就是一个变量在页面与函数之间可不可以相互使用,它的作用范围在哪里,下面小编来给大家介绍php变量使用域的一些学习笔记拿出来与大家交流一下。 在php当...2016-11-25
  • php变量作用域详解(1/3)

    变量的范围即它定义的上下文背景(也就是它生效的范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。...2016-11-25
  • C# WinForm捕获全局变量异常 SamWang解决方法

    本文将介绍C# WinForm捕获全局变量异常 SamWang解决方法,需要的朋友可以参考...2020-06-25
  • PHP register_globals自定义全局变量开启

    register_globals是php中一个自定全局变量功能,在默认情况下是关闭了,但如果你使用thinkphp框架那么就需要打开register_globals功能了,下面我们一起来看看如何开启它吧...2016-11-25
  • php中变量作用域和超级全局变量介绍

    一、变量的赋值 变量声明后就可以给其赋值,有两种方式:值赋值和引用赋值。 1、值赋值 $color = "red" ; $sum = 12+"15" ; /* $sum = 27 */ 2、 若希望两个变量指...2016-11-25