global,local,static的区别

1、在函数内部使用global关键字定义的变量可以成为全局变量,如果该变量已经被定义了,那么他的值就是原来的值,否则就是一个新的全局变量(一句话:已存在就不再创建):

 1     <?php
 2     $a=1;
 3     function run(){
 4         global $a;
 5         $a=10;
 6         $a++;
 7     }
 8     run();
 9     echo "Global variable a=$a \n";
10     $b=100;
11     function run1(){
12         $b=10;
13         $b+=10;
14     }
15     run1();
16     echo "variable b=$b\n";
17     function run2(){
18         global $c;
19         $c=10;
20         function innerRun0(&$c){
21             $c=20;
22         }
23         innerRun0($c);
24         var_dump($c);
25         function innerRun1(){
26            global $c;
27             $c=30;
28         }
29         innerRun1();
30         var_dump($c);
31     }
32     run2();
33     ?>

输出结果:

Global variable a=11
variable b=100
int(20)
int(30)

 如果在函数内部嵌套定义了另外一个函数,要想使用并改变父类函数中变量中的值,可以使用引用传递的方式(可以理解成C++中的引用);

2.static和c语言中的static使用方式是一样的,函数中使用它之后,当函数执行完毕之后,该变量的空间不会被立即回收,而且只被初始化一次:

1  function run(){
2         static $a=10;
3         $a++;
4         var_dump($a);
5     }
6     run();
7     run();
8     run();

输出结果:

 int(11)
int(12)
int(13)

 3、local顾名思义,就是局部变量。在函数内部声明得得变量就是局部量量,意思就是他的访问范围是在该函数内部。对应的是global变量,实在函数外部定义的变量,可以全局访问,如果在一个函数内部想要访问到全局变量的话可以使用global;

时间: 2024-08-30 05:29:27

global,local,static的区别的相关文章

C++ 匿名namespace的作用以及它与static的区别

一.匿名namespace的作用在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则在链接阶段就会发生重定义错误,为了解决这个问题,我们可以在定义这些标识符(identifier)的时候加上static关键字修饰以限制它只在一个tu范围内可见.C++继承了C语言中static关键字的这个用途,我们依旧可以使用static来避免多个tu中使用同一个标识符带来的重定义问题.此外C++还提供了另一种特有的方式,那就是匿名namespace:一

C++ 匿名namespace的作用以及与static的区别

匿名namespace的作用以及它与static的区别 一.匿名namespace的作用 在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做 为函数名或者全局变量名,则在链接阶段就会发生重定义错误,为了解决这个 问题,我们可以在定义这些标识符(identifier)的时候加上static关键字修 饰以限制它只在一个tu范围内可见. C++继承了C语言中static关键字的这个用途,我们依旧可以使用static来避免 多个tu中使用同一个标识符带来的重定义问题.

【翻译自mos文章】关于分区索引:Global, Local, Prefixed and Non-Prefixed

来源于: Partitioned Indexes: Global, Local, Prefixed and Non-Prefixed (文档 ID 69374.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 8.0.3.0 and later Information in this document applies to any platform. PURPOSE To differentiate between typ

(转)全局变量、extern/static/const区别与联系

全局变量.extern/static/const区别与联系 编译单元(模块):     在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别! 当在VC这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,V

C++中static 的使用方式,以及与c中的static的区别

http://blog.csdn.net/hackbuteer1/article/details/7487694 c++中static有种使用方式:面向过程的static,面向对象的static.前者用于普通变量或函数,不涉及类.而后者出现在类中. 一:面向过程的static , 1.静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: 1 #include<iostream> 2 using namespace std;

oracle中add&amp;split partition对global&amp;local index的影响

生产库中某些大表的分区异常,需要对现有表进行在线操作,以添加丢失分区,因为是生产库,还是谨慎点好,今天有空,针对add&split分区对global&local索引的影响进行了测试,测试版本为oracle11.2.0.4,过程如下: 首先,创建分区表: CREATE TABLE TP1 ( C1 INT PRIMARY KEY, C2 VARCHAR2(10), C3 CHAR(10) ) partition by range (c1) ( partition p1 values less

Java中主类中定义方法加static和不加static的区别

Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量被static修饰后的所有类的共享属性 b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化 4.This关键字的用法 this:是当前类的对象引用.简单的记,它就代表当前

C# 总结const、 readonly、 static三者区别:

总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些: c.静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰, d.在声明时初始化: e

PHP中global与$GLOBALS[&#39;&#39;]的区别

+++ 探讨(一)+++++++++++++++++++++++++++++++++++++++ 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身. global $var 是外部$var的同名引用或者指针.(错误:是个别名引用而已,非指针!!!) 举例说明一下: <?php $var1 = 1; $var2 = 2; function test() { $GLOBALS['var2']

C-const和static的区别, 指针作为函数的返回值, 指向函数的指针, 枚举

const和static的区别 const ——只读, 只在声明中使用 1 const int num = 10; 2 int const num = 10; num变量只读, 不能修改 1 const int arr[4] = {10, 20, 30, 40 }; 2 int const arr[4] = {10, 20, 30 ,40 }; 数组的元素的值不能被修改, 只读 1 const int *p1 = &num; 2 int const *p1 = &num; 无法通过p1指针