常量特点

  • 常量一旦被定义就无法更改或撤销定义。
  • 常量名不需要开头的$
  • 与变量不同,常量贯穿整个脚本是自动全局的。 作用域不影响对常量的访问
  • 常量值只能是字符串或数字

设置 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. 系统常量

常见的系统常量有:

  1. __FILE__:php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

  2. __LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。

  3. PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

  4. PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。

  5. apache_get_version():Apache版本

  6. 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(" ", '&nbsp;', $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 变量全解析(超全局变量、变量的8种数据类型等)的更多相关文章

  1. PHP全局变量,超全局变量

    php中有许多超全局变量,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS    引用全局 ...

  2. php全局变量 超全局变量

    php中有许多超全局变量,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS    引用全局 ...

  3. Google Guava Cache 全解析

    Google guava工具类的介绍和使用https://blog.csdn.net/wwwdc1012/article/details/82228458 LoadingCache缓存使用(Loadi ...

  4. PHP的魔术常量(变量)、魔术方法(函数)、超全局变量

    https://www.cnblogs.com/ccw869476711/p/9183783.html 一.魔术常量(魔术变量) 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位 ...

  5. php预定义变量,超全局变量,魔术方法,特殊函数变量使用

    <?php /* * 本代码全部为测试函数代码,部分注释和写实例 * * 修改php.ini variables_order=”EGPCS” * 请注意$_REQUEST在优先级传参的时候会造成 ...

  6. php最全基础,数组,函数,超全局变量,时间,回话,文件,php操作mysql

    共享一份学习php最全基础语法知识的笔记 原文链接:http://www.cnblogs.com/oscn/p/3607757.html:略有修改   http://www.cnblogs.com/l ...

  7. php魔术常量、超全局变量、魔术方法

    一.魔术常量(魔术变量) 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位置而变化. 1.__LINE__  获取文件中的当前行号. 2.__FILE__  获取文件的完整路径和 ...

  8. PHP变量入门教程(2)超全局变量,总共9个

    PHP 超全局变量 $GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量.该数组的键标为全局变量的 名称.从 PHP 3 开始存在 $GLOBALS 数组. $_SERVER 变量由 ...

  9. 【公众号系列】超详细SAP HANA JOB全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解 ...

随机推荐

  1. 常用PhpStorm 快捷键

    函数列表 打开某一个源码文件后,保证鼠标焦点在源文件内,按键盘组合键: alt + 7 返回原文件导航:双击最上面的工程名即可 PhpStorm折叠文件内所有函数 按下快捷`Ctrl`+`Shift` ...

  2. 恢复不小心误覆盖的代码文件 (sublime编辑器)

    最新写了一个python脚本,另外在终端上运行一个shell脚本循环记录一些性能.耗时参数.取出记录的数据,使用python pyplot强大的绘图功能来可视化,易用程度仅次于matlab. 本次文件 ...

  3. 查看vnc server的日志

    grep vnc /var/log/messages 转自: http://blog.csdn.net/denghua10/article/details/39107309

  4. python高级-------python2.7教程学习【廖雪峰版】(四)

    2017年6月9日17:57:55 任务: 看完高级部分 笔记:1.掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了.2.在Python中,代码不是越多越好,而是越少越好. ...

  5. mxnet编译问题手记

    MXNet在64位Win7下的编译安装:https://www.cnblogs.com/noahzn/p/5506086.html http://blog.csdn.net/Jarvis_wxy/ar ...

  6. 生成n个元素的全排列 C实现

    近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法. 问题是这种 用递归实现 n 个元素的全排列. 当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,-,rn ...

  7. GUN C中的错误报告

    在C语言中,很多库函数在调用失败时都会返回特定的值.比如返回-1,空指针,EOF等.但是这些值仅仅表示的调用失败,并未给出详细的错误信息.如果想查看详细的错误内容,就要去查看errno的错误代码,er ...

  8. GitHub 小试牛刀(踩坑记录)

    首先要在GitHub上创建好远程仓库,把README,LISCENCE,.gitignore三个文件在远程仓库初始化好. 然后在创建本地仓库,先要cd到自己的项目目录下,然后: $ git init ...

  9. 今天在网上查看了一个socket程序,运行的时候一直报错,经过队友解决?

    1.首先是问题代码ip_port = ('192.168.12.2',8001)2.上边的代码本身没有问题,但是必须经过修改自己本机的局域网IP地址才能顺利链接请参考上一篇blog的地址,查看本机的i ...

  10. iOS 运行时详解

    注:本篇文章转自:http://www.jianshu.com/p/adf0d566c887 一.运行时简介 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行 ...