基础
- PHP 语言的标记。
- 标准形式:
<?php
...当 php 代码后面没有 html 标签,可以省略掉结束标签 ?>。
?>
- 标准形式:
<script language="php">
...代码片段
</script>
- 短标签:
<?
...(不推荐)
这种方式依赖 php.ini 中的一项设置:short_open_tag = on
?>
- 书写规则。
- 语句结束符,分号:
php 标记中最后一个分号可省略;
php 结束标记 ?> 省略的情况下,最后一个分号不可省略; - 区分大小写:
类型 | 大小写 |
---|---|
变量 | 区分 |
常量 | - 通常情况下区分 |
- 可设定为不区分(不推荐) | |
函数 | 不区分 |
关键字 | 不区分 |
变量
- 常规变量。
- 声明变量:必须以 $ 开头,其后是变量的名称。
$name //√
1. 变量名:必须以字母或下划线开头。$name $_name //√
2. 变量名:不能以数字开头。$123 //×
3. 变量名:只能包含字母数字字符和下划线。A-z 0-9 _
4. 大小写敏感。$y != $Y
5. 在代码中,只要出现 $ 符号,就会被识别为变量:
echo "¥人名币,$美元"; //$美元 会被识别为变量!
▪ PHP 中变量赋初值就是定义变量,不支持 JS 中定义但不赋值的语法。 - 命名规则:
1. 驼峰命名法:name, myName, myFatherName
2. 帕斯卡命名法:Name, MyName, MyFatherName
3. 下划线间隔法:name, my_name, my_father_name
- 传值方式:值传递、引用传递。
1. 传值的方式不仅适用变量,同样适用于同等含义的语句:函数的参数。
2. 默认为值传递,使用引用传递的时,需要引用符号:&。 - 操作变量。
- 判断:通过 isset() 函数判断变量是否存在。
1. 存在:返回 true,不存在:返回 false。
2. 变量值为 null 时,也会返回 false。 - 删除:通过 unset() 函数销毁定义的变量。
unset() 的运行机制是断开变量名与内存中变量数据之间的关联,并将内存中的变量交还给内置的内存维护列表中。 - 特殊变量。
- 可变变量:指变量的嵌套,这是 php 中特殊的语法,在其他语言中很少见。
$a= "abc"; //普通变量
$abc= 10; //普通变量
echo $$a; //可变变量 可等同理解为 echo $a $abc
- 预定义变量:又称为超全局变量。
$_GET, $_POST, $_SERVER, $_REQUEST, $_GLOBALS, $_COOKIE, $_SESSION....
- 作用域:
- 局部作用域:只能在所定义的函数范围内使用。
- 全局作用域:在函数的“外部”范围使用。
- 超全局作用域:就是在函数的内部和外部都可以使用。
- 静态局部作用域:比局部作用域多一个特征,数据能够在函数退出后仍然保持不丢失。
注——PHP中,局部和全局作用域是不重叠的。
注——JS中,全局作用域包含局部作用域。
预定义变量
- $_GET 变量(数组):用于收集来自 method="get" 的表单中的值。
- 页面提交:
<form action="demo.php" method="get">
Name: <input type="text" name="name" />
Password: <input type="password" name="pass" />
<input type="submit" value="提交" />
</form>
<!-- 点击提交后,收集表单的数据发送给 demo.php -->
- 链接提交:
<a href="demo.php?name=boss&pass=123456"> sometext </a>
<!-- 点击 <a> 链接后,跳转到该页面并将数据以 url 形式传递 -->
- 属性方法:
<script>
some.onclick=function(){
location.href="demo.php?name=boss&pass=123456"
}
</script>
- 函数方法:
<script>
some.onclick=function(){
location.assign("demo.php?name=boss&pass=123456")
}
</script>
- 以上几种方法提交过来的数据是一样的。
<?php
$userName=$_GET['name']; //指数组的下标
$userPass=$_GET['pass']; //键名必须与提交的名称一致(区分大小写)
?>
- 综合示例:HTML 部分。
<form action="demo.php" method="get">
用户名:<input type="text" name="name" />
密 码:<input type="number" name="age" />
爱 好:<input type="checkbox" name="hobby[]" value="足球"/>足球
<input type="checkbox" name="hobby[]" value="篮球"/>篮球
<input type="checkbox" name="hobby[]" value="排球"/>排球
<input type="submit" value="提交" />
</form>
<hr/>
<a href="demo.php?name=帅哥&pass=999">点击跳转</a>
<hr/>
<div id="one" style="width:100px;height:100px;background: teal;"
onclick="one()">location.href</div>
<div id="two" style="width:100px;height:100px;background: blanchedalmond;"
onclick="two()">location.assign</div>
<script>
function one(){
location.href="demo.php?name=美女&pass=666";
}
function two(){
location.assign("demo.php?name=ASS&pass=2012");
}
</script>
<!-- 上述 HTML 代码中,对于多个爱好使用了二维数组。 -->
PHP 代码:
<?php
$userName=$_GET['name'];
$userPass=$_GET['pass'];
echo "$userName,$userPass";
echo "<hr/>";
echo "<pre>";
var_dump($_GET);
echo "</pre>";
//使用 var_dump 可以完整的打印 $_GET。
?>
- $_POST 变量(数组):类似 $_GET,详细的区别可以查看 这里。
post 只能通过表单提交数据:
<form action="demo.php" method="post">
<input type="text" name="n1" />
<select name="sun">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="n2" />
<input type="submit" value="提交" />
</form>
<!-- 点击提交后,收集表单的数据发送给 demo.php -->
PHP 代码:
<?php
if($_POST{ //判断打开方式
$num1=$_POST['n1'];
$num2=$_POST['n2'];
$sun=$_POST['sun'];
if( is_numeric($num1) && is_numeric($num2)){ //判断是否为数值
switch($sun){
case "+":
$result=$num1+$num2;
break;
case "-":
$result=$num1-$num2;
break;
case "*":
$result=$num1*$num2;
break;
case "/":
if($num2==0){
$result="除数不能为 0。";
}else{
$result=round($num1/$num2,2);
break;
}
}
}else{
$result="请输入数字。";
}
echo $result;
}else{
echo "请使用正确的打开方式。"
}
?>
- $_REQUEST 变量(数组):包含了 $_GET、$_POST,可以获取两种数据来源。
HTML 代码:
<form action="test.php?a=998&age=10" method="post">
<input type="text" name="name"/>
<input type="text" name="age"/>
<input type="submit" value="提交"/>
</form>
PHP 代码:
<?php
var_dump($_POST);
//array(2) { ["name"]=> string(2) "11" ["age"]=> string(2) "22" }
echo '<hr/>';
var_dump($_GET);
//array(2) { ["a"]=> string(3) "998" ["age"]=> string(2) "10" }
echo '<hr/>';
var_dump($_REQUEST);
//array(3) { ["a"]=> string(3) "998" ["age"]=> string(3) "22"
//["name"]=> string(3) "11" }
?>
- $_REQUEST 可以同时接受两种数据,但是同名的数据会被覆盖掉:
age
。
默认的存储顺序是 1.GET 2.POST,代表同名情况下 GET 会被覆盖。
可以在 php.ini 配置文件中修改顺序:request_order = "GP";//默认
- $_SERVER 变量(数组):存储了服务器 or 客户端的一些请求、设置信息。
参数 | 描述 |
---|---|
argv | 传递给该脚本的参数 |
argc | 包含传递给程序的命令行参数的个数(如果运行在命令行模式) |
DOCUMENT_ROOT | 网站根目录(apche httpd.conf 中的 DocumentRoot) |
GATEWAY_INTERFACE | 服务器使用的 CGI 规范的版本。例如,“CGI/1.1” |
HTTP_ACCEPT | 当前请求的 Accept: 头部的内容 |
HTTP_ACCEPT_CHARSET | 当前请求的 Accept-Charset: 头部的内容,例如:“iso-8859-1,*,utf-8” |
HTTP_ACCEPT_ENCODING | 当前请求的 Accept-Encoding: 头部的内容,例如:“gzip” |
HTTP_ACCEPT_LANGUAGE | 当前请求的 Accept-Language: 头部的内容,例如:“en” |
HTTP_CONNECTION | 当前请求的 Connection: 头部的内容,例如:“Keep-Alive” |
HTTP_HOST | 当前请求的 Host: 头部的内容 |
HTTP_REFERER | 链接到当前页面的前一页面的 URL 地址 |
HTTP_USER_AGENT | 当前请求的 User-Agent: 头部的内容 |
HTTPS | 如果通过https访问,则被设为一个非空的值(on),否则返回off |
PHP_SELF | 当前网页的文件路径 |
PATH_TRANSLATED | 当前 脚本所在文件系统(不是文档根目录)的基本路径 |
QUERY_STRING | get 请求地址:http://www.abc.com/abc.php?a=10 中的 a=10 这段字符串 |
REMOTE_ADDR | 用户的 IP 地址 |
REMOTE_HOST | 用户的主机名 |
REMOTE_POST | 用户连接到服务器时所使用的端口 |
REQUEST_METHOD | 访问页面时的请求方法,例如:“GET”、“HEAD”,“POST”,“PUT” |
REQUEST_URI | 访问此页面所需的 URI。例如,“/index.html” |
SCRIPT_NAME | 包含当前 脚本的路径。这在页面需要指向自己时非常有用 |
SCRIPT_FILENAME | 当前执行 脚本的 绝对路径名 |
SERVER_ADMIN | 管理员信息 |
SERVER_ADDR | 服务器 IP 地址 |
SERVER_NAME | 服务器的主机名 |
SERVER_SOFTWARE | 服务器标识的字串,在响应请求时的头部中给出 |
SERVER_PROTOCOL | 请求页面时通信协议的名称和版本,例如,“HTTP/1.0” |
SERVER_PORT | 服务器所使用的端口 |
SERVER_SIGNATURE | 包含服务器版本和 虚拟主机名的字符串 |
打印 $_SERVER:
<?php
echo "<style>td{padding:3px;}</style>";
echo "<table border='1'cellspacing='0' cellpadding='0'>";
foreach($_SERVER as $key => $value){
echo "<tr>";
echo "<td>$key</td>";
echo "<td>$value</td>";
echo "</tr>";
};
echo "</table>";
?>
- $GLOBALS 变量(数组): 所有的全局变量都储存在 $GLOBALS 中。
<?php
$v1=1;
$v2=2;
echo "123";
function abc(){
$v3=3;
$v4=4;
}
abc();
echo '<pre>';
var_dump($GLOBALS);
echo '</pre>';
?>
//输出结果如下:
/*array(8) {
["_GET"]=> array(0) {}
["_POST"]=> array(0) {}
["_COOKIE"]=> array(1) {
["ext_type"]=> string(1) "1" }
........
重点如下:
["GLOBALS"]=>
*RECURSION*
["v1"]=> int(1)
["v2"]=> int(2)
}*/
常量
- 常量类似变量,但是常量一旦被定义就无法更改或撤销定义。
- 常量以字符或下划线开头。
- 与变量不同,常量贯穿整个脚本自动全局。
- 定义形式:
- define() 函数 :
define(常量名,常量值,大小写 bool 值);
推荐常量名使用大写形式;
<?php
define('CONST110',111);
define('_C2',"AAA");
define('pi',3.14); //小写,不推荐
//调用常量
echo CONST110; //111
$title="<h3>"._C2."</h3>";
$arc=pi*5*5;
echo "<hr />";
echo $title; //AAA
echo "<hr />";
echo $arc; //75
?>
- const 语法:
const 常量名 = 常量值;
const 只能在 "最顶层" 的代码中使用(即:不能在 {} 中使用);
<?php
const C1=998;
echo C1; //998
if(C1>1){
const C2=110; //error
}
echo constant("C1"); //998
$s1="C1";
echo constant($s1); //998
?>
- 常量和变量的区别:
- 常量不需要 $ 符号声明;
- 常量值不可更改或销毁;
- 常量自带超全局作用域;
- 常量只能存储标量类型(int、float、string、bool);
- 通过 defined() 函数判断是否为常量。
if(defined(常量)){ dosometing.... }
//或者
$flag=defined(常量); //true false
特殊常量
预定义常量。
PHP 中定义了大量的常量,可直接调用;其中有些常量需要打开指定模块后才可以使用,(例如:mysql 模块)。举例:
M_PI(圆周率) PHP_OS(操作系统) PHP_VERSION(版本号) PHP_INI_MAX(正无穷)
详细可参见 目录。
魔术常量。
魔术常量是一种可以在不同条件环境下反映不同值的常量。比如:
__DIR__(当前文件所在目录)
、__FILE__(当前文件)
、__LINE__(当前行)
<?php
echo "当前文件目录:".__DIR__; //X:\phpStudy\WWW\php
echo "<br/>";
echo "当前文件:".__FILE__; //X:\phpStudy\WWW\php\demo.php
echo "<br/>";
echo "当前代码所在行:".__LINE__; //6
echo "<br/>";
echo "当前代码所在行:".__LINE__; //8
echo "<br/>";
?>