| 
 | 
	
 
 
  看了几天的书,今天开始动手编程了,发现自已对变量和作用域这方面理解不透,这里做个总结。 
 
  在编程的时候我们总免不了会犯错,调试和查看日志,是两个很重要的方法来帮我们调试程序。在第三天里,我已经安装了xdebug来帮助调试(日志系统还没有时间看,待研究……),这里介绍几个标准输出函数供调试的时候用。 
 
 
 
 
echo()  打印一个或多个简单变量或值 
 
print()  打印一个简单变量或值 
 
printf()  打印一个格式化字符串 
 
var_dump()  打印一个变量的类型和内容 
 
printf_r()  递归打印一个数组 
 
debug_backtrace()  返回一个包含调用栈和其他值的数组 
    
 
  关于变量 
 
 
   
 
  全局变量(全局作用域) 
 
 
   
一个变量如果定义在全局作用域中,它就会在全局作用域中都可见,而在所有函数或类方法中都不可见。打个比方,函数或类方法都是有外壳的,全局变量不够强大,冲不进去,所以没办法使用它们。 
 
 
<?php  
$a = 7; 
function test(){ 
$a = 20; //只可惜,在函数里该问不到全局变量  
} 
test(); 
echo "\$a = $a"; // $a = 7 
?>  
   超全局变量(真正的全局作用域) 
 
 
  超全局变量就像是超级玛丽吃了无敌药水,连函数和类方法的外壳都可以冲进去了,它是真正的无敌的。到处都可以访问。 
 
 
 
 
$GLOBALS  这是一个关联数组,包含全局作用域中所定义各个变量的引用 
 
$_SERVER  服务器设置的变量 
 
$_ENV  环境变量 
 
$_GET  通过URL提供给脚本的变量 
 
$_POST 通过HTTP POST提供给脚本的变量 
 
$_COOKIE  通过HTTP cookie提供给脚本的变量 
 
$_FILE 通过HTTP POST提供给脚本的变量 
 
$_REQUEST GET、POST和COOKIE方法提供的所有变量 
 
$_SESSION  目前在会话中注册的变量 
   如何让全局变量变成超全局变量? 
 
 
   
 
  方法一: 
 
 
<?php  
$a = 7;  
function test(){  
global $a; 
$a = 20;  
}  
test(); 
echo "\$a = $a";  
?> 
   增加global $a;这一行,使$a两个变量引用相同的内存,以后再在函数中使用时,仍需global关键字。 
 
  方法二: 
 
 
<?php  
$a = 7;  
function test(){  
$GLOBALS['a'] = 20; 
} 
test();  
echo "\$a = $a"; 
?>  
  
    
 
  在超全局变量数组中定义一个变量 
  局部变量 
   
 
   
 
   
 
  与函数有关的变量(函数作用域) 
 
 
 
 
 
局部变量 
 
 
参数变量 
 
 
静态变量 
这是一个很神奇的东西,它仅在局部函数作用域中存在,且,再次调用函数时还能保留这个值(感觉和JS闭包的功能有点像)。 
 
全局变量(见全局变量) 
   与类有关的变量 
 
 
 
 
- 成员变量/属性
 
 - 方法
 
 - 静态变量(用::访问)
 
 - 静态方法(用::访问)
 
 - 类常量(用const定义,用::访问)
 
     
常量 
  常量的作用域和超全局作用域是一样的,无敌! 
  PHP中使用define()函数来定义一个常量的,其语法格式为: 
  bool defined(string $name, mixed $value [, bool case_$insensitive] 
  name:指定常量的名称 
  value:指定常量的值 
  insensitive:指定常量名称是否区分大小写,ture(不区分),false(区分),默认false。 
  常量和变量的有一个区别是:常量只能保存标量数据(字符串,布尔值,整数,浮点数)。 
  系统预定义常量(并非是真正的常量,因为这些所谓的常量会根据使用的场合改变值) 
 
 
- __FILE__  当前文件名
 
 - __LINE__  当前行号
 
 - __FUNCTION__  当前函数名
 
 - __CLASS__  当前类名
 
 - __METHOD__  当前方法名
 
 - PHP_VERSION 存储当前PHP的版本号
 
 - PHP_OS 存储当前服务器的操作系统
 
 
  
 
  作用域 
  作用域是指在一个脚本中某个变量可以使用或可见范围。 
 
 
- 内置的超级全局变量可以在脚本的任何地方使用和可见。
 
 - 常量,一旦被声明,将可以在全局可见,也就是说,他们可以在函数内外使用。
 
 - 在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部。
 
 - 函数内部使用的变量声明全局变量时,其名称要与全局变量名称一致。
 
 - 在函数内部创建并被声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值。
 
 - 在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
 
 
  |   
 
 
 
 | 
  
 |