PHP 常量、PHP 变量全解析(超全局变量、变量的8种数据类型等)
2017-05-05 14:01
621 查看
常量特点
常量一旦被定义就无法更改或撤销定义。常量名不需要开头的$
与变量不同,常量贯穿整个脚本是自动全局的。 作用域不影响对常量的访问
常量值只能是字符串或数字
设置 PHP 常量
如需设置常量,请使用 define(name, value) 函数,它有三个参数:- 首个参数定义常量的名称
- 第二个参数定义常量的值
- 可选的第三个参数规定常量名是否对大小写敏感。默认是大小写敏感:false。
define("MYNAME", "白小明"); echo MYNAME; // 白小明 echo MyName; // undefined MyName define("NAME", "白小明", true); echo NAME; // 白小明 echo Name; // 白小明
获取 PHP 常量
使用常量名直接获取值;使用 constant() 函数,它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,在使用上要灵活、方便。
判断一个常量是否已经定义:defined()
define("PI",3.14); $is1 = defined('PI'); $is2 = defined('PI1'); var_dump($is1); // boolean true var_dump($is2); // boolean false
PHP中的常量分为自定义常量和系统常量
1. 自定义常量
在 PHP 中,用 define() 函数定义一个常量define("PI",3.14); echo constant('PI'); define("GREETING","Hello world!",TRUE); echo constant('greeting');
2. 系统常量
常见的系统常量有:__FILE__:php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。
__LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。
PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。
PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。
apache_get_version():Apache版本
PHP_SAPI:运行方式
echo __FILE__; // E:\Web\Project\_wamp\demo.php echo __LINE__; // 3 echo PHP_VERSION; // 5.6.25 echo PHP_OS; // WINNT
PHP 变量规则:
在 PHP 中,没有创建变量的命令,变量会在首次为其赋值时被创建。在 PHP 中,所有变量都对大小写敏感,而对所有用户定义的函数、类和关键词的大小写不敏感。
变量以 $ 符号开头,其后是变量的名称
变量名称必须以字母或下划线开头,不能以数字开头
变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
PHP 变量的三种作用域:
PHP 在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。global(全局作用域)
函数之外声明的变量拥有 global 作用域,只能在函数以外进行访问。
local(局部作用域)
函数之内声明的变量拥有 local 作用域,只能在函数内部进行访问。
可以在不同的函数中创建名称相同的局部变量,因为局部变量只能被创建它的函数所识别。
如果要在函数内部使用全局变量,可以在变量前加 global 关键字。
static(静态作用域)
通常,当函数执行后,会删除所有变量,不过,有时我需要不删除某个局部变量。
实现这一点需要在您首次声明变量时使用 static 关键词,但是该变量仍然是函数的局部变量。
所以,每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息。
$a = 10; // global // 在函数内部直接使用全局变量 function f1() { echo $a; } f1(); // Undefined echo $a; // 10 // 在函数内部运用 global 使用全局变量 function f2() { global $a; echo $a; }f2(); // 10 // 在函数内部运用 $GLOBALS['variable'] 使用全局变量 function f3() { $GLOBALS['a'] += 10; echo $GLOBALS['a']; } f3(); // 20 // static function f4() { static $a = 50; echo $a; $a++; } f4(); // 50 f4(); // 51 f4(); // 52
PHP 超全局变量
超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量,在函数或方法中无需执行 global $variable; 就可以访问它们。这些超全局变量是:
$GLOBALS
PHP 在名为 $GLOBALS[‘variable’] 的数组中存储了所有全局变量。变量的名字就是数组的键。
$x = 1; $y = 2; function add() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } add(); echo $z; // 3
$_SERVER
$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。
能够在 $_SERVER 中访问的元素:http://www.w3school.com.cn/php/php_superglobals.asp
echo $_SERVER['SERVER_NAME']; // localhost echo $_SERVER['HTTP_HOST']; // localhost echo $_SERVER['PHP_SELF']; // /PHPDemo/demo.php echo $_SERVER['SCRIPT_NAME']; // /PHPDemo/demo.php echo $_SERVER['HTTP_REFERER']; // http://localhost/PHPDemo/ echo $_SERVER['HTTP_USER_AGENT']; // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
$_REQUEST
$_REQUEST 用于收集 HTML 表单提交的数据。
method=”GET” 和 method=”POST” 都适应
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="text" name="bxm"> <input type="submit" value="提交"> </form> <?php $bxm = $_REQUEST['bxm']; echo $bxm; ?> </body> </html>
$_POST
PHP $_POST 广泛用于收集提交 method=”post” 的 HTML 表单后的表单数据。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form method="GET" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="text" name="bxm"> <input type="submit" value="提交"> </form> <?php $bxm = $_REQUEST['bxm']; echo $bxm; ?> </body> </html>
$_GET
PHP $_GET 广泛用于收集提交 method=”get” 的 HTML 表单后的表单数据。
$_GET 也可以收集 URL 中的发送的数据。
<a href="demo.php?subject=PHP&web=W3school.com.cn">测试 $GET</a> <?php $subject = $_GET['subject']; $web = $_GET['web']; ?>
$_FILES
存储各种与上传文件有关的信息
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data"> <input type="file" name="myFile" value="" placeholder=""> <input type="submit" name="" value="提交"> </form> <?php echo $_FILES["myFile"]["name"] . "<br>"; // 头像.png echo $_FILES["myFile"]["size"] . "<br>"; // 142344 echo $_FILES["myFile"]["tmp_name"] . "<br>"; // D:\wamp64\tmp\phpFDC5.tmp echo $_FILES["myFile"]["type"] . "<br>"; // image/png echo $_FILES['myFile']['error'] . "<br>"; // 0 ?>
$_ENV
PHP中的$_ENV是一个包含服务器端环境变量的数组。
var_dump($_ENV);
$_COOKIE
将用户的会话数据存储在客户端浏览器
setcookie('test', '', time() -1); ob_start(); // 打开输出控制缓冲 print_r($_COOKIE); $content = ob_get_contents(); // 复制缓冲区内容到$content中 $content = str_replace(" ", ' ', $content); ob_clean(); // 清空(擦掉)输出缓冲区 header("content-type:text/html; charset=utf-8"); echo '当前的Cookie为:<br>'; echo nl2br($content); // nl2br 在字符串所有新行之前插入 HTML 换行标记 <br>
$_SESSION
将用户的会话数据存储在服务端
session_start(); // 创建一个 session $_SESSION['sessionName'] = 'sessionValue'; echo "session_id:" . session_id() . "<br>"; // 显示当前的session_id echo $_SESSION['sessionName']; // 读取 session 的值 unset($_SESSION['sessionName']); //销毁一个session var_dump($_SESSION);
PHP 变量的数据类型
在 PHP 中,支持8种原始类型,其中包括四种标量类型、两种复合类型和两种特殊类型。PHP是一门松散类型的语言,不必向PHP声明变量的数据类型,PHP会自动把变量转换为自动的数据类型,一定程度降低了学习PHP的门槛。
1. 布尔类型(boolean)
TRUE 与 FALSE,不区分大小写。$flag = TRUE;
2. 整型(integer)
整型可以用十进制、八进制、十六进制指定。- 十进制就是日常使用的数字
- 八进制,数字前必须加 0 ,如0123
- 十六进制,数字前必须加 0x ,如0x1a
3. 浮点型(float)
也就是通常说的小数,可以用小数点或者科学计数法表示。E代表的英文是exponent,指数的意思。$num_float1 = 1.234; //小数点 $num_float2 = 1.2e3; //科学计数法,小写e $num_float3 = 7.0E - 10; //科学计数法,大写E
4. 字符串(string)
字符串型可以用三种方法定义:单引号形式、双引号形式和 Heredoc 结构形式。单引号与双引号的作用是有区别的: 双引号解析变量,单引号不解析变量 。在没有变量的时候最好使用单引号,速度比较快。
$var1 = 'hello'; echo '$var1'; // $var1 echo "$var1"; // hello
单引号与双引号可以嵌套, 单双、双单会输出。单单、双双需转义
$str_string1 = '甲问:"你在哪里学的PHP?"'; $str_string2 = "乙毫不犹豫地回答:'当然是慕课网咯!'"; $str_string3 = '甲问:\'能告诉我网址吗?\''; $str_string4 = "乙答道:\"www.imooc.com\"";
当字符串很长可以使用 Heredoc 结构形式,只要用了<<<之后用相同的字母作为起点和结尾就可以了。
heredoc 和 nowdoc:link
<?php $string1 = <<<GOD 我有一只小毛驴,我从来也不骑。 有一天我心血来潮,骑着去赶集。 我手里拿着小皮鞭,我心里正得意。 不知怎么哗啦啦啦啦,我摔了一身泥. GOD; echo $string1; ?>
5. 复合类型 — 数组(array)
数组是一个复合类型的变量,能够在单独的变量名中存储一个或多个值。$arr = array(); // 表示创建一个空数组,并把创建的空数组赋值给变量$arr。 $fruitArr1 = array("苹果","香蕉","菠萝"); $fruitArr2 = array("0"=>"苹果", "1"=>"香蕉", "2"=>"菠萝", "3"=>array("大葡萄","小葡萄"));
在 PHP 中,有三种数组类型:
索引数组 : 带有数字索引的数组,键的顺序是从0开始。创建方法:
$fruitArr = array("苹果", "香蕉", "菠萝"); for ($i = 0; $i < count($fruitArr); $i++) { echo $fruitArr[$i]; }
关联数组 : 带有指定键的数组,自己分配给数组的指定键。创建方法:
$age = array("Bill" => "35", "Steve" => "37", "Peter" => "43"); $age['bxm'] = '白小明'; foreach($age as $x => $x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }
多维数组 : 包含一个或多个数组的数组
$fruitArr = array( array("苹果", 33, 20), array("香蕉", 17, 15), array("葡萄", 5, 2), array("橘子", 15, 11) ); // 获得数组的长度 - count() 函数 for ($i = 0; $i < count($fruitArr); $i ++) { echo "<b>行数 $i</b>"; echo "<ul>"; for ($j = 0; $j < count($fruitArr[$j]); $j ++) { echo "<li>" . $fruitArr[$i][$j] . "</li>"; } echo "</ul>"; }
6. 复合类型 — 对象(class)
在 PHP 中,必须明确地声明对象。首先我们必须使用 class 关键词声明对象的类。类是包含属性和方法的结构。
然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型:
class Car { var $color; function Car($color="green") { $this->color = $color; } function what_color() { return $this->color; } }
7. 特殊类型 — 资源(resource)
资源是由专门的函数来建立和使用的,例如打开文件、数据连接、图形画布。可以对资源进行操作(创建、使用和释放)。
任何资源,在不需要的时候应该被及时释放。如果我们忘记了释放资源,系统自动启用 垃圾回收机制 ,在页面执行完毕后回收资源,以避免内存被消耗殆尽。
<?php // f.txt文本文件保存时一定要设置为UTF-8格式,避免出现乱码。 // open() 函数:打开文件,得到返回值的就是资源类型。 $file_handle = fopen("f.txt","r"); if ($file_handle){ // 一行行地读取文件,然后输出每行的文字 // feof() 函数:检测是否已到达文件末尾。 while (!feof($file_handle)) { // fgets() 函数:读取一行文本 $line = fgets($file_handle); //输出一行文本 echo $line; echo "<br />"; } } // fclose() 函数:关闭文件,释放资源 fclose($file_handle); ?>
8. 特殊类型—空类型(NULL)
NULL是空类型,对大小写不敏感NULL类型只有一个取值,表示一个变量没有值,可以通过把值设置为 NULL,将变量清空
当被赋值为NULL,或者尚未被赋值,或者被unset(),这三种情况下变量被认为为NULL。
<?php // 禁止显示PHP警告提示 error_reporting(0); $var; var_dump($var); $var1 = null; var_dump($var1); $var2 = NULL; var_dump( $var2); $var3 = "白小明"; unset($var3); var_dump($var3); ?>
相关文章推荐
- PHP 变量的数据类型 全解析
- PHP中的变量&常量以及数据类型
- 第三课 PHP 语法 变量 数据类型 常量
- php变量、常量和数据类型
- PHP学习之[第03讲]PHP5.4 语法、常量、变量、数据类型详解
- php变量、常量和数据类型
- 全面解析Java支持的数据类型及Java的常量和变量类型
- PHP5.4语法、常量、变量、数据类型
- php的变量、常量和数据类型
- php(2)——常量、变量和数据类型
- php 语法 常量 变量 数据类型详解
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--常量
- PHP语法基础:数据类型、常量与变量的声明及区别
- PHP中的变量&常量以及数据类型
- 磨刀不误砍材工 - Java的基础语言要素(从变量/常量切入,看8种基本数据类型)
- 边记边学PHP-(三)PHP数据类型、常量、变量及表达式1
- 边记边学PHP-(四)PHP数据类型、常量、变量及表达式2
- PHP变量常量数据类型简单罗列
- 深入解析数据类型与变量
- PHP学习笔记(23)PHP的数据类型与常量使用(24)PHP的运算符与表达式