搜索
首页后端开发php教程php 变量作用域学习笔记分享_PHP教程

php 变量作用域学习笔记分享_PHP教程

Jul 13, 2016 am 10:50 AM
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
",$x);

}

assignx();

printf("$x outside of function is %d
",$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

 代码如下 复制代码

 

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


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

 代码如下 复制代码

 

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. 演示需要静态变量的例子

 代码如下 复制代码

 

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


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

 

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

 


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

 代码如下 复制代码

 

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


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

 代码如下 复制代码

 

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、理解变量作用域。

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

 代码如下 复制代码

 

  $url = "www.bKjia.c0m";  
  function _DisplayUrl()  
  {  
      echo $url;  
  }  
  function DisplayUrl()  
  {  
    global $url;  
    echo $url;  
  }  
  _DisplayUrl();  
  DisplayUrl();  
?> 

  $url = "www.bKjia.c0m";
  function _DisplayUrl()
  {
      echo $url;
  }
  function DisplayUrl()
  {
    global $url;
    echo $url;
  }
  _DisplayUrl();
  DisplayUrl();
?>

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

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

 代码如下 复制代码


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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632648.htmlTechArticle变量作用域就是一个变量在页面与函数之间可不可以相互使用,它的作用范围在哪里,下面小编来给大家介绍php变量使用域的一些学习笔记...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用数据库存储会话的优点是什么?使用数据库存储会话的优点是什么?Apr 24, 2025 am 12:16 AM

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

您如何在PHP中实现自定义会话处理?您如何在PHP中实现自定义会话处理?Apr 24, 2025 am 12:16 AM

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

什么是会话ID?什么是会话ID?Apr 24, 2025 am 12:13 AM

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

您如何在无状态环境(例如API)中处理会议?您如何在无状态环境(例如API)中处理会议?Apr 24, 2025 am 12:12 AM

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

您如何防止与会议有关的跨站点脚本(XSS)攻击?您如何防止与会议有关的跨站点脚本(XSS)攻击?Apr 23, 2025 am 12:16 AM

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

您如何优化PHP会话性能?您如何优化PHP会话性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

什么是session.gc_maxlifetime配置设置?什么是session.gc_maxlifetime配置设置?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

您如何在PHP中配置会话名?您如何在PHP中配置会话名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),