2-3变量的作用域-PHP实战开发教程

2-3变量的作用域-PHP实战开发教程

腺翔亢雇趁轰寥经劲埂渐劝洼


 作用域只有三个:
 1.全局:函数之外创建,仅在当前脚本除函数之外的地方使用;
 2.局部:函数内部创建,仅能在函数中使用,外部不可访问;
 3.静态:函数内部创建,仅在函数中使用,函数执行完成它的值不丢失;

什么叫函数?

 函数:是脚本中具有特定功能的代码段,可以重复调用
1.基本语法:
   1.1 函数声明: function funcnName($args){ #code…}
   1.2 函数表达式(匿名函数): $funcName = function ($ages){ #code…}
 2.调用:
   2.1 按名调用: funcName($args) / $funcName($args)
   2.2 自调用: 声明与调用同时完成
       (function (args){ #code…})()

实例:

新建demo4.php

2-3变量的作用域-PHP实战开发教程第1张

代码:

<?php
echo "<h2>函数的作用域</h2>";
echo "<hr color='red'>";
$siteName="萌面人资料铺";

function hello()
{
    //函数内部不能直接访问全局变量$siteName
    $userName='mengmianren';
    return '欢迎来到'.$siteName.'我是:'.$userName;
}
echo hello();//函数内部不能直接访问全局变量$siteName
echo $userName;//在函数外部也不能访问函数内部的变量

执行:

2-3变量的作用域-PHP实战开发教程第2张

错误原因:函数内部不能直接访问全局变量$siteName  在函数外部也不能访问函数内部的变量

使用global来使用全局变量

<?php
echo "<h2>函数的作用域</h2>";
echo "<hr color='red'>";
$siteName="萌面人资料铺";

function hello()
{
    global $siteName;
    $userName='mengmianren';
    return '欢迎来到'.$siteName.',我是:'.$userName;
}
echo hello();

执行:

2-3变量的作用域-PHP实战开发教程第3张

当声明全局变量时,php会自动生成一个超全局数组$GLOBALS[‘siteName’]

可以通过如下方式使用该数组:

<?php
echo "<h2>函数的作用域</h2>";
echo "<hr color='red'>";
$siteName="萌面人资料铺";

function hello()
{
    $userName='mengmianren';
    return '欢迎来到'.$GLOBALS['siteName'].',我是:'.$userName;
}
echo hello();

执行:

2-3变量的作用域-PHP实战开发教程第4张


静态变量,必须且仅能在函数中声明和使用

实例:

<?php
function mystatic()
{
    $num=1;
    return '第'.$num.'次调用结果为:'.$num++.'<br>';
}
echo mystatic();
echo mystatic();
echo mystatic();
echo mystatic();
echo mystatic();

执行:

2-3变量的作用域-PHP实战开发教程第5张

每次调用mystatic(),$num都被重新赋值为1,如果不想每次都被重新赋值,想要使用上一次函数调用的结果,应该将$num变为静态

<?php
function mystatic()
{
    static $num=1;
    return '第'.$num.'次调用结果为:'.$num++.'<br>';
}
echo mystatic();
echo mystatic();
echo mystatic();
echo mystatic();
echo mystatic();

执行:

2-3变量的作用域-PHP实战开发教程第6张

此时$num变为了静态变量,只有在函数第一次调用时被赋值。后面就不再赋值了。



超全局变量:$_SERVER,$_COOKIE,$_SESSION,$_GET,$_POST,$_REQUEST

$_REQUEST=$_GET+$_POST+$COOKIE
1. 属预定义变量,全部是数组,拿来就用,不需要声明;
2. 跨作用域,在全局和局部(函数内部)都可以直接使用;
3. 跨作用域不是跨脚本,所谓超全局,包括全局,都是指在当前脚本文件中。

可以在全局直接引用超全局变量

代码:

<?php
echo "我的姓名是:".$_GET['name'];

执行:

2-3变量的作用域-PHP实战开发教程第7张

在浏览器地址栏输入name=mengmianren

2-3变量的作用域-PHP实战开发教程第8张

在函数中引用超全局变量

代码:

<?php
function sayname()
{
    return "我的姓名是:".$_GET['name'];
}
echo sayname();

在浏览器地址栏输入?name=萌面人

2-3变量的作用域-PHP实战开发教程第9张

注意:超全局变量是系统预定义的,在用户创建的每一个PHP文件中,都会自动创建,不用用户手动创建。


襄融谰犯细锑姆雹柿簿冉奈垒