首页 php教程 php手册 Php入门教程之PHP 变量基本语法

Php入门教程之PHP 变量基本语法

May 25, 2016 pm 04:48 PM
入门教程 变量 基本

变量是php中非常常用的一个东西,所有的操作都要经过变量来传递,下面我来给各位同学介绍在php中变量的一些常用用法与关于php变量基础知识,

具体方法:

PHP变量用于存储字符、数字、数组甚至对象内容等,以便在我们需要的地方使用.定义一个变量的语法:

$变量名 = 值;

使用变量的例子:

实例代码如下:

<?php
$var_char = "你好!";
echo $var_char;
?>
登录后复制

执行这段代码输出的结果是:

1 你好!

从这个例子可以看出,变量名以 $ 开始,标明这是一个变量.变量名以字母(a-z、A-Z)或者下划线 _ 开始,后面可以跟任意字母或数字以及下划线,但不能是空格.如下这些变量名是有效的:

$var_char

$varChar

$_varChar

$var_char5

提示:关于变量命名,我们建议变量名以标明其实际语意的组合为佳,如 $my_name 或 $myName 格式.

全局变量global

全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…

今天就遇到了php 全局变量不起作用的问题.先上一段简单的代码:

实例代码如下:

<?php
$a = 0;
function Test() {
    $a = 1;
}
Test();
echo $a;
?>
登录后复制

上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下:

<?php
$a = 0;
function Test() {
    global $a; //申明函数体Test内使用的$a变量为global全局变量
    $a = 1;
}
Test();
echo $a;
?>
登录后复制

申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1.上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:

实例代码如下:

//A.php 文件 
<?php
function Test_Global() {
    include &#39;B.php&#39;;
    Test();
}
$a = 0;
Test_Global();
echo $a;
?> 
//B.php 文件 
<?php
function Test() {
    global $a; //申明函数体Sum内使用的$a变量为global全局变量
    $a = 1;
}
?>
登录后复制

为什么输出的却是0?!!

在用户自定义函数中,一个局部函数范围将被引入.任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!

解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….

解决方案:

1. 冲出局部函数//A.php 文件

实例代码如下:

<?php
function Test_Global() {
    Test();
}
include &#39;B.php&#39;; //将include 从局部Test_Global函数中移出
$a = 0;
Test_Global();
echo $a;
?>
登录后复制

//B.php 文件

<?php
function Test() {
    global $a;
    $a = 1;
}
?>
登录后复制

2.优秀的访问器

实例代码如下:

//A.php 文件

<?php
include &#39;B.php&#39;;
$a = 0;
Set_Global($a);
echo $a;
?>
登录后复制

//B.php 文件

<?php
function Set_Global(&$var) {
    $var = 1;
}
?>
登录后复制

php变量 引用函数 static变量

"无论怎样声明变量(按值或按引用),总之在PHP脚本的任何位置都可以声明变量.但是,声明的位置会大大影响访问变量的范围.这个可访问的范围称为作用域(scope)" -PHP与MySQL程序设计.在了解php变量之前,我们先看看段式内存管理架构的内存段的划分.通常操作系统会将物理内存划分为以下几个逻辑段.

Text-Segment,这个段最大的特点就是只读.一般存放可执行代码,也有可能常量也存放在这里,比如字符串常量 BSS-Segment,这里存放了那些没有初始化的变量.某种意义来讲,没有初始化的变量都是垃圾,不可用 Data-Segment,这里存放了全局变量和静态变量,直到脚本运行结束,操作系统才会回收这里的内存空间,变量亦会被销毁.

Stack-Heap Segment 函数参数与本地变量(也称局部变量)存放在堆中(stack),还有返回值等等.用完了,操作系统就会回收这部分内存空间.对于C程序员而言,可以自行从栈中(heap)申请内存空间,用完了,也需要自己手动释放.

作为PHP程序言而言,我们关心的是全局变量、静态变量、局部变量、函数参数以及函数返回值.局部变量和函数参数基本上一样,在初始化的时候分配内存空间,退出函数后操作系统会回收内存空间。而全局变量与静态变量要直php脚本运行结束后,内存空间才会被释放.与全局变量不同的时,所有静态变量在程序执行之前就初始化并且分配了内存空间.

注:

1.函数外部声明静态变量意义不大,函数内部声明静态变量受限于作用域,函数外部不能修改函数内部静态变量.

2.引用变量,也是变量,只不过它的值是变量的内存地址.

php保留字global和static实例代码如下:

<?php
$i = $j = 8;
function global_var() {
    global $j, $b;
    $c = $j = $b = $i = 4;
}
global_var();
echo "i:$i, j:$j b:$b c:$c n"; //i:8, j:4 b:4 c:
?>
登录后复制

函数外和内都有变量$i,但是他们二个是完全不同的变量.函数外的$i是全局变量,该内存空间直到脚本运行结束后才会被释放.函数内的$i是局部变量,程序流经过函数的时候,初始化,退出函数的时候,内存被系统回收,再次调用函数,则再次分配内存空间和回收内存空间.二次分配的内存空间有可能是同一内存地址,也有可能不能同一内存地址.

与$i不同的是$j,通过关键字global将局部变量"转为"全局变量.当调用函数global_var()的时候,并不会重新给$j分配内存空间.同样的,可以在函数外打印$b,却不能打印$c是因为$b是全局变量,不会被销毁.而$c则不能打印,$c已经不存在了.在退出函数就给销毁了.

实例代码如下:

<?php
$a = 2;
static $b = 2;
static $c = 3;
function global_var() {
    static $i, $c;
    global $j, $a;
    $c = $a = $b = $i = $j = 4;
}
global_var();
echo "a:$a b:$b c:$c i:$i j:$j"; //a:4 b:2 c:3 i: j:4
?>
登录后复制

首先,我们看函数外的$b和$c,即是全局变量又是static变量.这里static修饰没有太大的意义,因为他们都存放在数据段(data-segment),直到脚本运行完了之后才会被回收。然后,我们再看函数里面的$i和$c,函数调用后,$i和$c其实都没有被回收,但是$i输出是NULL和$c输出是3,这是因为他们的作用域是函数内部,不是函数外部,也就是说$i和$c在函数外是不可见的.函数内static变量的意义就在于此:仅函数内部可见且不会被销毁。也就是说,保证函退出函数,变量也不会被回收,但又不会被其它函数修改.(注:函数外和函数内的$c是二个不同的变量)

实例代码如下:

<?php
function global_var() {
    static $i;
    ++$j;
    ++$i;
    echo "j:$j i:$i n";
}
global_var(); //j:1 i:1
global_var(); //j:1 i:2
global_var(); //j:1 i:3
?>
登录后复制

上例中,变量$j一直都是1,而$i每调用一次就累加1.这是因为,局部变量存放在堆段,每次退出函数时都会被回收.而$i存放在存放在数据段(data-segment),直到程序执行完毕才会被回收.我们平常说的static变量,如果没有特别指明,都说的是函数内部的static变量.

引用函数与static变量

既然static变量要直到脚本执行结束,才会被销毁.那么,有没有办法访问该变量的值呢?我们来看看下面的示例:

实例代码如下:

<?php
get_local_static_var();
$ptr = & get_local_static_var();
get_local_static_var();
++$ptr;
get_local_static_var();
what_i($ptr);
get_local_static_var(); //??
what_p($ptr);
get_local_static_var(); //??
function &get_local_static_var() {
    static $i;
    ++$i;
    echo "i:$i n";
    return $i;
}
function what_i($ptr) {
    $i = & get_local_static_var();
    ++$i;
    ++$ptr;
}
function what_p(&$ptr) {
    $i = & get_local_static_var();
    ++$i;
    ++$ptr;
}
?>
登录后复制

二个凝问号处,分别输出是8和12,这就说明了只要变量没有被销毁,还是可以被访问.我们可以通过引用函数将static变量的地址返回其它函数,其它函数则可通过static变量的地址访问并且修改它的值.

上例第一处??,为什么是8,而不是9.这是因为what_i($ptr)函数,要求参数是按值传递,即此处的$ptr实参值是5,且参数$ptr和全局变量$ptr是二个不同的变量.第二处??的值是12,为什么不是11的道理亦是如此.what_p(&$ptr)函数,要求参数是按引用传递,即此处的$ptr是指向static变量$i的地址,需要注意的是参数$ptr和全局变量$ptr也是二个不同的变量,只不过他们都指向同一个地方.

drupal应用赏析

drupal定义了一个drupal_static函数,其它函数的static变量都存放在一个数组中,然后对drupal应用到的所有static进行统一管理,比如赋值,重置,删除等.我觉得,这是一个好办法.

实例代码如下:

<?php
function &drupal_static($name, $default_value = NULL, $reset = FALSE) {
    static $data = array() , $default = array();
    if (!isset($name)) {
        foreach ($default as $name => $value) {
            $data[$name] = $value;
        }
        return $data;
    }
    if ($reset) {
        if (array_key_exists($name, $default)) {
            $data[$name] = $default[$name];
        } else {
            return $data;
        }
    } elseif (!array_key_exists($name, $data)) {
        $default[$name] = $data[$name] = $default_value;
    }
    return $data[$name];
}
function ip_address() {
    $ip_address = & drupal_static(__FUNCTION__);
    if (!isset($ip_address)) {
        $ip_address = $_SERVER[&#39;REMOTE_ADDR&#39;];
        if (variable_get(&#39;reverse_proxy&#39;, 0)) {
            if (array_key_exists(&#39;HTTP_X_FORWARDED_FOR&#39;, $_SERVER)) {
                $reverse_proxy_addresses = variable_get(&#39;reverse_proxy_addresses&#39;, array());
                if (!emptyempty($reverse_proxy_addresses) && in_array($ip_address, $reverse_proxy_addresses, TRUE)) {
                    $ip_address_parts = explode(&#39;,&#39;, $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]);
                    $ip_address = trim(array_pop($ip_address_parts));
                }
            }
            if (array_key_exists(&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;, $_SERVER)) {
                $ip_address = $_SERVER[&#39;HTTP_X_CLUSTER_CLIENT_IP&#39;];
            }
        }
    }
    return $ip_address;
}
ip_address();
//在drupal中很多这样的应用方式,将其它函数的static变量都存放到一个地方,即drupal_static的data中,然后再统一管理,比如重置等等。
?>
登录后复制


教程地址:

欢迎转载!但请带上文章地址^^

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用Windows 11和10环境变量进行配置文件操作指南 使用Windows 11和10环境变量进行配置文件操作指南 Nov 01, 2023 pm 08:13 PM

环境变量是运行应用和程序的位置路径(或环境)。它们可以由用户创建、编辑、管理或删除,并在管理某些进程的行为时派上用场。下面介绍如何创建配置文件以同时管理多个变量,而无需在Windows上单独编辑它们。如何在环境变量中使用配置文件Windows11和10在Windows上,有两组环境变量–用户变量(应用于当前用户)和系统变量(全局应用)。但是,使用像PowerToys这样的工具,您可以创建一个单独的配置文件来添加新的和现有的变量并一次管理它们。方法如下:步骤1:安装PowerToysPowerTo

PHP7中的变量的严格模式:如何减少潜在的错误? PHP7中的变量的严格模式:如何减少潜在的错误? Oct 19, 2023 am 10:01 AM

PHP7中引入了严格模式,该模式可以帮助开发者减少潜在的错误。本文将介绍什么是严格模式以及如何在PHP7中使用严格模式来减少错误。同时,将通过代码示例演示严格模式的应用。一、什么是严格模式?严格模式是PHP7中的一个特性,它可以帮助开发者编写更规范的代码,减少一些常见的错误。在严格模式下,会对变量的声明、类型检查、函数调用等进行严格的限制和检测。通

初学者指南:从零开始,逐步学习MyBatis 初学者指南:从零开始,逐步学习MyBatis Feb 19, 2024 am 11:05 AM

简明易懂的MyBatis入门教程:一步一步编写你的第一个程序MyBatis是一种流行的Java持久层框架,它简化了与数据库交互的过程。本教程将为您介绍如何使用MyBatis创建和执行简单的数据库操作。第一步:环境搭建首先,确保您的Java开发环境已经安装好。然后,下载MyBatis的最新版本,并将其添加到您的Java项目中。您可以从MyBatis的官方网站下

什么是Java中的实例变量 什么是Java中的实例变量 Feb 19, 2024 pm 07:55 PM

Java中的实例变量是指定义在类中,而不是方法或构造函数中的变量。实例变量也称为成员变量,每个类的实例都有自己的一份实例变量副本。实例变量在创建对象的过程中被初始化,以及在对象的生命周期中保存并保持其状态。实例变量的定义通常放在类的顶部,可以用任何访问修饰符来声明,可以是public、private、protected或默认访问修饰符。这取决于我们希望这个变

如何使用Ajax从PHP方法中获取变量? 如何使用Ajax从PHP方法中获取变量? Mar 09, 2024 pm 05:36 PM

使用Ajax从PHP方法中获取变量是Web开发中常见的场景,通过Ajax可以实现页面无需刷新即可动态获取数据。在本文中,将介绍如何使用Ajax从PHP方法中获取变量,并提供具体的代码示例。首先,我们需要编写一个PHP文件来处理Ajax请求,并返回所需的变量。下面是一个简单的PHP文件getData.php的示例代码:

PHP函数介绍—is_string(): 检查变量是否为字符串 PHP函数介绍—is_string(): 检查变量是否为字符串 Jul 24, 2023 pm 09:33 PM

PHP函数介绍—strpos():检查变量是否为字符串在PHP中,is_string()是一个非常有用的函数,它用于检查变量是否为字符串。当我们需要确定一个变量是否为字符串时,is_string()函数可以帮助我们轻松实现这个目标。下面我们将学习关于is_string()函数的使用方式以及提供一些相关代码示例。is_string()函数的语法非常简单。它只需

Python 语法的思维导图:深入理解代码结构 Python 语法的思维导图:深入理解代码结构 Feb 21, 2024 am 09:00 AM

python凭借其简单易读的语法,广泛应用于广泛的领域中。掌握Python语法的基础结构至关重要,既可以提高编程效率,又能深入理解代码的运作方式。为此,本文提供了一个全面的思维导图,详细阐述了Python语法的各个方面。变量和数据类型变量是Python中用于存储数据的容器。思维导图展示了常见的Python数据类型,包括整数、浮点数、字符串、布尔值和列表。每个数据类型都有其自身的特性和操作方法。运算符运算符用于对数据类型执行各种操作。思维导图涵盖了Python中的不同运算符类型,例如算术运算符、比

深入理解C语言中的const 深入理解C语言中的const Feb 18, 2024 pm 12:56 PM

C中const的详解及代码示例在C语言中,const关键字用于定义常量,表示该变量的值在程序执行过程中不能被修改。const关键字可以用于修饰变量、函数参数以及函数返回值。本文将对C语言中const关键字的使用进行详细解析,并提供具体的代码示例。const修饰变量当const用于修饰变量时,表示该变量为只读变量,一旦赋值就不能再修改。例如:constint

See all articles