php全局变量的使用

一、总结

1、php的全局变量:php的全局变量和C++,Java的全局变量不一样

2、页面嵌套php:我在html页面中嵌套php代码的时候,php的全局变量好像和C++,Java的全局变量一样,好像是,记不清了

3、php全局变量使用php全局变量用global定义一下就好,就在外面定义global是错的,必须在函数内声明

4、global定义全局变量:global定义全局变量的时候,不能一起赋值,像global $name = "why"的使用方式是错误的

5、global使用(函数外声明global是错的):下面实例中还是在函数里面声明global然后才能用

二、PHP 全局变量

一直认为PHP的全局变量与C++、Java全局变量类似,直到最近做项目过程中使用的局变量,才发现需要补充学习下这方面的内容。

1、全局变量的global的定义和使用

  最初,我的需求是这样的:
<?php
$name = "why";
function changeName(){
$name = "what";
}
changeName();
echo "my name is " . $name . "<br/>";
?>

  执行代码的结果是:my name is why,而不是执行changeName()后显示what。分析原因,这是因为函数体changeName内$name变量被缺省设置为局部变量,$name的作用域就是在changeName内。于是,修改代码,添加全局变量如下:

<?php
global $name;
$name = "why";
function changeName(){
$name = "what";
}
changeName();
echo "my name is " . $name . "<br/>";
?>

  注意:不能在用global声明变量的同时给变量赋值。像global $name = "why"的使用方式是错误的。

  定义全局变量后执行的结果仍然为my name is why,这个结果让我吃惊。原来,global的正确用法是:"在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数传递进来)。那么,再次修改代码:

<?php
$name = "why";
function changeName(){
global $name;
$name = "what";
}
changeName();
echo "my name is " . $name . "<br/>";
?>

  这次的运行结果是:my name is what,说明global是起传递参数的作用,而并非使变量的作用域为全局。再看下面的例子:

<?php
$name = "why";
function changeName(){
global $name;
$name = "what";
}
function changeName2(){
$name = "where";
}
changeName();
changeName2();
echo "my name is " . $name . "<br/>";
?>

  执行结果为:my name is what,如果在changeName2()中添加global $name,运行结果则是:my name is where。

  综上,global的作用就相当于传递参数,在函数外部声明的变量,如果在函数内想要使用,就用global来声明该变量,这样就相当于把该变量传递进来了,就可以引用该变量了。

  除了使用global参数定义外,还可以使用超全局变量$GLOBAL:

<?php
$name = "why";
function changeName(){
$GLOBALS['name'] = "what";
}
changeName();
echo "my name is " . $name . "<br/>";
?>

2、global和$GLOBAL

一个例子:

<?php
$var1 = 1;
$var2 = 2;
function test1(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
}
test1();
echo $var2 . "<br />"; $var3 = 1;
$var4 = 2;
function test2(){
global $var3,$var4;
$var4 = &$var3;
}
test2();
echo $var4 . "<br />";
?>

  输出$var2的值为1,$var4的值为2,因为$var3的引用指向了$var4的引用地址。$var4的实际值并没有改变。官方的解释是:$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针。意味着$GLOBAL在一个脚本的全部作用域中都可用,在函数或方法中无需执行global $variable; 就可以访问它们。与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的。另一个例子:

<?php
$var1 = 1;
function test1(){
unset($GLOBALS['var1']);
}
test1();
echo $var1 . "<br />"; $var2 = 1;
function test2(){
global $var2;
unset($var2);
}
test2();
echo $var2;
?>

  输出结果是$var1不存在,而$var2的值为1。这就证明,$var2只是别名引用,本身的值没有受到任何的改变。也就是说global $var其实就是$var = &$GLOBALS['var'],调用外部变量的一个别名而已!

参考:

PHP 全局变量 - borage - 博客园
https://www.cnblogs.com/borage/p/3645285.html

三、实例(php实现排列组合)

 <?php
namespace app\index\controller; use app\index\controller\Base; class Exercise extends Base
{
public function index()
{
// return view('insert_array');
$this->plzhDemo();
} /**
* php实现排列组合
* 参数:传入数组 排列组合所取的位数 vis数组 ans数据用来记录每次的结果
* 算法;递归(回溯)
* 返回值:返回排列组合结果数组
* @return [type] [description]
*/
private $count1=0;
public function plzh($arr,$n,$pos,$vis,$ans){
//1、递归返回条件:位数够了就可以返回了
if($pos>$n-1){
global $count1;
$count1++;
dump($ans);
}else{
$len=count($arr);
for ($i=0; $i < $len; $i++) {
if($vis[$i]==0){//没取
$ans[$pos]=$arr[$i];
$vis[$i]=1;
$this->plzh($arr,$n,$pos+1,$vis,$ans);
$vis[$i]=0;
}
}
}
//2、递归里面的算法(一位一位的来取)取一位之后,把这一位的数标记置为已经取了,然后取后面的位的时候从没有取的数里面取,所以需要标记数组
//2.1、 从未取的数里面依次取一位就好 }
public function plzhDemo(){
$arr=array(1,2,3,4,5,6,7);
$n=5;
$vis=array();
for ($i=0; $i <=count($arr) ; $i++) {
$vis[$i]=0;
}
$ans=array();
$this->plzh($arr,$n,0,$vis,$ans);
global $count1;
dump($count1);
} }

还是在函数里面声明了global然后用的。

php全局变量的使用的更多相关文章

  1. cookies如何成为全局变量以及设置,删除,获取

    (一)cookie机制将信息存储于用户硬盘,因此可以作为全局变量 (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供 ...

  2. php内核分析(三)-全局变量

    这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux CG CG是从全局的compiler_global中获取属性值,里面存储的就是编译过程使用到的全局变量. struct _ ...

  3. 全局变量:global与$GLOBALS的区别和使用

    今天在写框架的时候想把SaeMySQL初始化之后作为全局变量使用.但是后来发现PHP中的全局变量和Java或者OC中的全局变量还是有较大区别的.下面记录一下php里面的global的使用相关注意事项. ...

  4. 针对JS经典题型对全局变量及局部变量的理解浅谈

    第一次写博,还蛮激动... 看到了三题经典题型,就我目前的认识对此题进行总结.如有错误,敬请指正 首先,我们先明确一下JS引擎的工作步骤: js引擎工作分为两步: 1.将这个js中的变量和函数声明保存 ...

  5. kettle中全局变量的设置

    设置全局变量. 找到.properties文件: 在文件中设置值: 在kettle中新建一个job(不用做任何设置): 转换中获取便元的设置: 重启kettle的执行结果:

  6. 记录PHP的超全局变量$_SERVER

    $_SERVER是PHP中十分实用的超全局变量,在开发可移植的网站的时候会变得很有用. 下面我记录一下我自己常用到的几个变量 1.$_SERVER['SERVER_NAME']:记录了网站的域名. 2 ...

  7. 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法(转载)

    在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:t ...

  8. C#-WebForm-★内置对象简介★Request-获取请求对象、Response相应请求对象、Session全局变量(私有)、Cookie全局变量(私有)、Application全局公共变量、ViewState

    内置对象: 1.Request - 获取请求对象 用法:接收传值 protected void Page_Load(object sender, EventArgs e) { TextBox1.Tex ...

  9. 全局变量都是window对象的属性

    var x = "haha"; var test  = function(){ alert(this.x); } 上述,则会弹出 haha的值. 因为在JavaScript的变量作 ...

  10. PHP中的全局变量global和$GLOBALS的区别

    1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件. 但是在函数体内定义的global变量,函数体 ...

随机推荐

  1. 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)

    [题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; ...

  2. hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集

    #1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲 ...

  3. POJ——T 3255 Roadblocks|| COGS——T 315. [POJ3255] 地砖RoadBlocks || 洛谷—— P2865 [USACO06NOV]路障Roadblocks

    http://poj.org/problem?id=3255 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15680   ...

  4. easyui combobox 获取焦点

    easyui combobox 获取焦点 学习了:http://blog.csdn.net/foart/article/details/14446809 可以直接用: $('#spanZhudaoci ...

  5. Light OJ 1341 Aladdin and the Flying Carpet

    题意:求大于b的a的因数对有几组.例10  2结果为{2,5},12 2结果为{2,6}{3,4}-----不反复 解一:分解质因数+DFS #include <iostream> #in ...

  6. [Android随笔]内存泄漏以及内存溢出

    名词解释 内存泄漏:memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危害能够忽略,但内存泄漏堆积后果非常严重,不管多少内存,迟早会被占光. 内存溢出:out of ...

  7. django 笔记3

    FBV function base view url.py index -> 函数名 view.py def 函数(requset): ... CBV class base view /inde ...

  8. Unix/Linux环境下多一点不如少一点

    正如很多人所知道的$PATH环境变量里存着一张目录列表,当用户要执行某一程序时,系统就会按照列表中的内容去查找该程序的位置.当程序名前不带点斜线 . / 时$PATH就会起作用. 对于普通用户和roo ...

  9. datatable设置成中文

    $('#datatable').DataTable({ language: { "sProcessing": "处理中...", "sLengthMe ...

  10. window.location.href和window.top.location.href的区别

    if (window.location.href == window.top.location.href) {     window.top.location.href = "/index. ...