欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

教程  php基础(三)--变量和常量

PHP学习 本站 1022 0评论

一、PHP变量


变量是指程序执行中可以改变其值的量,通过一个变量名来标识。系统为程序中每个变量分配一个存储单元,变量名实质是计算机内存单元的命名。借助变量名可访问内存中的数据。


1.变量的定义

PHP变量不需要声明,只需要为其赋值即可。变量的名称用 $ 标识符表示,命名规则:

$name = value;

1.变量名必须以 $ 符号开头。  

2.第二个字符必须是字母或下划线,后面的可以是数字或其他的字符。

3.变量名是区分大小写的。

例:$a=”hello”;    $_class=32;    $a4c=’a33’;

提示:

· 变量的名称经常用英文,并且名称有它的使用含义。

· 在定义变量时,变量名不能和已有的重复。一般在定义时给定初始值,如果没有给定,在使用时PHP根据变量在语句中的位置采用其默认值:

字符串的初始值为空;整形的初始值为0;布尔类型的初始值为false

<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var";      // 输出 "Bob, Joe"
$4site = 'not yet';     // 非法变量名;以数字开头
$_4site = 'not yet';    // 合法变量名;以下划线开头
$i站点is = 'mansikka';  // 合法变量名;可以用中文
?>


虽然在 PHP 中并不需要初始化变量,但对变量进行初始化是个好习惯。未初始化的变量具有其类型的默认值 - 布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量(例如用于 echo 中)默认值是空字符串以及数组变量的默认值是空数组。

isset() 语言 可以用来检测一个变量是否已被初始化。


2.变量的赋值      

除了直接赋值,变量还有两种方式可以声明和赋值。一种是变量间的赋值。如:

$string1 = ”abc”;   $string2 = $string1;   $string1 = ”cd”;   echo  $string2;   //结果为abc


另外一种是引用赋值。即用不同的名字访问同一变量内容。当改变其中一个变量值时,另外一个也跟着变化。引用赋值使用“&”符号来表示引用。如:

$i = “abc”;   $j = &$i;   $i=”hello,$i”;    echo $j;    echo $i;  

$j是跟着$i的值变化而变化。输出  hello,abc;hello,abc


引用和赋值的区别在于,赋值是将原变量内容复制下来,开辟一个新的内存空间保存,而引用则是给变量内容再起一个名字。



有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。

<?php
$foo = 25;
$bar = &$foo;      // 合法的赋值
$bar = &(24 * 7);  // 非法; 引用没有名字的表达式
function test()
{
   return 25;
}
$bar = &test();    // 非法
?>


赋值类型:

变量可以被赋值为整形,浮点型,字符型,布尔型,对象,数组等类型。变量类型由赋值的值来自动转换的。如用“=”可自动转换为字符,用“+=”可自动转换为数字,在将字符串转换为数字时,如果字符串含有”e”,”E”,”. ”,或 ”、”,则将其转换为浮点型而不是整形。

例:$a=”1”;//字符串     $a+=1;//整形     $a+1.1;//浮点型       $a=array($a);//数组

$time=time();//函数    $i=$a>$b?$a:$b;   $i=$a+$b//表达式


注意: $this 是一个特殊的变量,它不能被赋值。


3.变量的作用域

变量有它的使用范围,根据不同的变量定义规则其作用域不同。


1)局部变量:在class,function,if/while/for等函数结构语句内部声明的变量,其作用域时所在的函数

大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。例如:

<?php
$a = 1;
include 'b.inc';
?>

这里变量 $a 将会在包含文件 b.inc 中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:

<?php
$a = 1; /* global scope */
function Test()
{
    echo $a; /* reference to local scope variable */
}
Test();
?>

这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。


2)全局变量:声明的变量不在class,function,if等语言结构内部,即定义在函数外的。作用域是整个PHP文件,在用户自定义函数内部不可使用。如果要在class,function,if等内部使用,需要用关键词global或者超全局变量$GLOBALS

global  $string = “abc”;  //全局变量

例:


<?php
$zy="12";  //全局变量,自定义函数内部不可使用
$zyy="12123"; //全局变量,自定义函数内部不可使用
function lxl(){
    echo $zy."<br>";   //不能被调用,没有输出,提示没有定义
    global $zyy;   //利用global关键字在函数内部定义全局变量
    echo $zyy."<br>";
}
lxl();
?>


3)静态变量: 在function中使用关键词static声明的变量,能够在函数调用结束后仍保留其值,当再次回到其作用域时,可以继续使用原来的值。而一般变量是在函数调用结束后,其存储的数值被清除,所占的内存空间被释放。

例:static  $string = “abc”;  //静态变量


<?php
function test()
{
    static $a = 0;
    echo $a;
    $a++;
}
?>

现在,变量 $a 仅在第一次调用 test() 函数时被初始化,之后每次调用 test() 函数都会输出 $a 的值并加1。


静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。以下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:

<?php
function test()
{
    static $count = 0;
    $count++;
    echo $count;
    if ($count < 10) {
        test();
    }
    $count--;
}
?>


· 在PHP中,全局变量实际上是静态全局变量,如果不用unset显式的释放,那么等脚本运行结束全局变量才会被释放掉。

· 局部静态变量细分可以是 局部静态函数变量(函数中声明的static变量),局部静态成员变量(类中声明的 static 属性,被所有类实例共享)。

· 局部静态变量只有脚本运行结束才会被自动释放

· 静态声明是在编译时解析的。


全局和静态变量的引用

对于变量的 static 和 global 定义是以引用的方式实现的。例如,在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。这有可能导致预料之外的行为,如以下例子所演示的:

<?php
function test_global_ref() {
    global $obj;
    $obj = &new stdclass;
}
function test_global_noref() {
    global $obj;
    $obj = new stdclass;
}
test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

以上例程会输出:

NULL

object(stdClass)(0) {

}

类似的行为也适用于 static 语句。引用并不是静态地存储的。


4.可变变量

1.所谓可变变量,就是一个变量的名,又是一个变量。可变变量的语法形式是php特殊的语法,其他语言中少见。

2.有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。

3.在 PHP 的函数和类的方法中,超全局变量(预定义变量GLOBAL)不能用作可变变量

4.$this变量也是一个特殊变量,不能被动态引用。


实现可变变量的过程是在 变量前面再多加一个“$”,如 $$a

$a = 'hello';

一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如:

$$a = 'world';

这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,以下语句:

echo "$a ${$a}";

与以下语句输出完全相同的结果:

echo "$a $hello";

它们都会输出:hello world。


5.预定于变量(超全局变量)

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

参考文章:http://php.net/manual/zh/reserved.variables.php 

$GLOBALS — 引用全局作用域中可用的全部变量

$_SERVER — 服务器和执行环境信息

$_GET — HTTP GET 变量

$_POST — HTTP POST 变量

$_FILES — HTTP 文件上传变量

$_REQUEST — HTTP Request 变量

$_SESSION — Session 变量

$_ENV — 环境变量

$_COOKIE — HTTP Cookies

$php_errormsg — 前一个错误信息

$HTTP_RAW_POST_DATA — 原生POST数据

$http_response_header — HTTP 响应头

$argc — 传递给脚本的参数数目

$argv — 传递给脚本的参数数组


超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量

PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

这些超全局变量是:

$GLOBALS

$_SERVER

$_GET

$_POST

$_FILES

$_COOKIE

$_SESSION

$_REQUEST

$_ENV


常用的超全局变量:

1.$_SERVER['SERVER_ADDR'] 当前运行脚本所在的服务器的IP地址。

2.$_SERVER['SERVER_NAME'] 当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,则该名称是由虚拟主机所设置的值决定。

3.$_SERVER['REQUEST_METHOD'] 访问页面时的请求方法。如GET、HEAD、POST、PUT等,如果请求的方式是HEAD,PHP脚本将在送出头信息后中止(这意味着产生任何输出后,不再有输出缓冲)

4.$_SERVER['REMOTE_ADDR'] 正在浏览当前页面用户的IP地址

5.$_SERVER['REMOTE_HOST'] 正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR 用户连接到服务器时所使用的端口。

6.$_SERVER['REMOTE_PORT'] 用户连接到服务器时所使用的端口。

7.$_SERVER['SCRIPTFILENAME']  当前执行脚本的绝对路径名。注意:如果脚本在CLI中被执行,作为相对路径,如file.php或者../file.php,$_SERVER['SCRIPT_FILENAME']将包含用户指定的相对路径。

8.$_SERVER['SERVER_PORT'] 服务器所使用的端口,默认为80。如果使用SSL安全连接,则这个值为用户设置的HTTP端口。

9.$_SERVER['SERVER_SIGNATURE'] 包含服务器版本和虚拟主机名的字符串。

10.$_SERVER['DOCUMENT_ROOT'] 当前运行脚本所在的文档根目录。在服务器配置文件中定义。

11.$_COOKIE 通过 HTTPCookie 传递到脚本的信息。这些 cookie 多数是由执行PHP脚本时通过 setcookie() 函数设置的。

12.$_SESSION 包含与所有会话变量有关的信息。$_SESSION 变量主要应用于会话控制和页面之间值的传递。

13.$_POST 包含通过 POST 方法传递的参数的相关信息。主要用于获取通过 POST 方法提交的数据。

14.$_GET 包含通过 GET 方法传递的参数的相关信息。主要用于获取通过 GET 方法提交的数据。

15.$GLOBALS 由所有已定义全局变量组成的数组。变量名就是该数组的索引。它可以称得上是所有超级变量的超级集合。


二、PHP常量


1.定义常量

常量用于存储不经常改变值的量,一旦确定值后,在整个程序执行过程中这个值都有效,并且不可以再次赋值

常量由英文字母、下划线、数字组成,但数字不能是首字母出现。

PHP中使用define()函数定义常量,语法格式为:

define(string  constant_name,  mix value ,  case_sensitive=true),其中

constant_name:必选参数,常量名称,即标识符

Value:必选参数,常量的值

case_sensitive:可选参数,指定时候对大小写敏感,true表示不敏感,默认是敏感


说明:和变量的区别:

1.常量名称前面没有 $ 符号

2.常量只能包含标量数据(boolean,integer,float和string);

3.常量只能用define()函数定义,而不能通过赋值语句

4.常量可以不用理会变量范围的规则而在任何地方定义和访问

5.常量一旦定义就不能被重新定义或者取消定义

6.常量的值只能是标量。

举例: 

define("CONSTANT","Helloworld.");


系统(默认)常量:一些常用的PHP系统常量(预定义常量),如下:(__是两个下划线)

__FILE__   当前PHP文件名

__LINE__   当前PHP文件中所在的行数

__FUNCTION__   当前所执行的函数

__CLASS__   当前所执行的类

PHP_VERSION   PHP的版本

PHP_OS   当前服务器的操作系统

TRUE   同true

FALSE   同false

E_ERROR   到最近的错误处

E_WARNING   到最近的警告处

E_PARSE   语法有错误处

E_NOTICE   PHP语言中有异常处,不一定是错误处

M__PI   圆周率

M__E   科学常数e

M__LOG2E   以2为底e的对数

M_LOG10E   以10为底e的对数

M_LN2 2   的自然对数

M_LN10 10   的自然对数


2.PHP获取常量

PHP获取常量值的两个方法:

1.使用常量名直接获取值。

2.使用constant( ) 函数,和1的效果是一样的。但是函数可以动态输出不同的常量,使用上要灵活些。语法格式为:

mixed  constant(string const_name)

const_name为要获取常量的名称,也可以为存储常量名的变量。如果成功过则返回常量的值,失败则提示错误信息:常量没有被定义。


要判断一个常量时候已经定义,也可以使用defined()函数,语法格式为:

bool  defined(string const_name)

参数const_name为要获取常量的名称,成功则返回true,否则返回false。


举例:

define("MESSAGE","只能看到一次!");
echo MESSAGE."<BR>";
echo Message;   //表示没有该常量
echo "<br>";
define("COUNT","能看到多次!",true);
echo COUNT."<BR>";
echo count."<BR>";  //对大小写不敏感
$name="count";
echo constant($name)."<BR>";   //输出常量
echo (defined("MESSAGE"))."<BR>";   //如果被定义为返回true,输出1

输出为:

只能看到一次!

Message

能看到多次!

能看到多次!

能看到多次!

1


参考网址:

变量:http://php.net/manual/zh/language.variables.php

常量:http://php.net/manual/zh/language.constants.php 


转载请注明: ITTXX.CN--分享互联网 » php基础(三)--变量和常量

最后更新:2019-02-26 17:40:44

赞 (2) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽