PHP 变量规则
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
注释:PHP 变量名称对大小写敏感!
PHP 是一门类型松散的语言
- 我们不必告知 PHP 变量的数据类型
PHP变量作用域
Local 和 Global 作用域
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
PHP global 关键词
global关键词用于访问函数内的全局变量。
要做到这一点,请在(函数内部)变量前面使用 global 关键词:
|
|
var_dump() 会返回变量的数据类型和值
设置 PHP 常量
如需设置常量,请使用define()函数 - 它使用三个参数:
- 首个参数定义常量的名称
- 第二个参数定义常量的值
- 可选的第三个参数规定常量名是否对大小写敏感。默认是 false。
下例创建了一个对大小写敏感的常量,值为 “Welcome to W3School.com.cn!”:
实例
|
|
字符串里单引号和双引号的区别
- 双引号解析变量,单引号不解析变量
- 单引号执行速率更快
- 双引号解析所有的转义符,单引号只解析`和\这两种转义符
数据类型转换
- $str = 1 + ‘999abc’; 结果为10000;
字符串运算符
- . 串接 $txt1 = “Hello”; $txt2 = $txt1 . “ world!” 现在 $txt2 包含 “Hello world!”
- .= 串接赋值 $txt1 = “Hello”; $txt1 .= “ world!” 现在 $txt1 包含 “Hello world!”
foreach 循环
foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。
语法
|
|
每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。
PHP关联数组(即字典 map)
关联数组是使用您分配给数组的指定键的数组。
有两种创建关联数组的方法:
|
|
或者:
|
|
随后可以在脚本中使用指定键:
实例
|
|
表单元素
什么是 $_SERVER["PHP_SELF"]变量?
$_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。
因此,$_SERVER["PHP_SELF"]将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。
什么是 htmlspecialchars() 函数?
htmlspecialchars()函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
PHP中不同的PHP片段是可以互相使用的 也就是没有片段一说 只是跟jsp很像 哪里使用写哪里
PHP Date() 函数
获得简单的日期
|
|
date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。
下面列出了一些常用于日期的字符:
d - 表示月里的某天(01-31)
m - 表示月(01-12)
M - 月的英文大写
Y - 表示年(四位数)
1 - 表示周里的某天
其他字符,比如 “/“, “.” 或 “-“ 也可被插入字符中,以增加其他格式。
自动版权年份
© 2010-<?php echo date("Y")?>
获得简单的时间
下面是常用于时间的字符:
h - 带有首位零的 12 小时小时格式
i - 带有首位零的分钟
s - 带有首位零的秒(00 -59)
a - 小写的午前和午后(am 或 pm)
mktime() 创建日期
语法
mktime(hour,minute,second,month,day,year)
strtotime() 用字符串来创建日期
strtotime(time,now)
实例
<?php
$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
?>
PHP include 和 require 语句
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
include 和 require 语句是相同的,除了错误处理方面:
require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
include 只生成警告(E_WARNING),并且脚本会继续
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
语法
include 'filename';
或
require 'filename';
PHP 操作文件
注意:请谨慎操作文件!
当您操作文件时必须非常小心。如果您操作失误,可能会造成非常严重的破坏。常见的错误是:
- 编辑错误的文件
- 被垃圾数据填满硬盘
- 意外删除文件内容
readfile() 函数
readfile()函数读取文件,并把它写入输出缓冲。
Open File - fopen()
打开文件的更好的方法是通过fopen()函数。此函数为您提供比readfile()函数更多的选项。
fopen()的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式。如果fopen()函数未能打开指定的文件,下面的例子会生成一段消息:
实例
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>
读取文件 - fread()
fread()函数读取打开的文件。
fread()的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。
关闭文件 - fclose()
fclose()函数用于关闭打开的文件。
读取单行文件 - fgets()
fgets()函数用于从文件读取单行。
检查 End-Of-File - feof()
feof()函数检查是否已到达"end-of-file" (EOF)。
feof()对于遍历未知长度的数据很有用。
下例逐行读取 “webdictionary.txt” 文件,直到end-of-file:
实例
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 输出单行直到 end-of-file
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>
读取单字符 - fgetc()
fgetc()函数用于从文件中读取单个字符。
创建文件 - fopen()
fopen()函数也用于创建文件。也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。
如果您用 fopen()打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)。
文件权限
如果您试图运行这段代码时发生错误,请检查您是否有向硬盘写入信息的 PHP 文件访问权限。
写入文件 - fwrite()
fwrite() 函数用于写入文件。
fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串。
下面的例子把姓名写入名为 “newfile.txt” 的新文件中:
实例
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
什么是 Cookie?
cookie常用于识别用户。
cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回cookie的值。
PHP session
变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
Session 变量
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
session_start()
session_start()函数必须位于 标签之前:
<?php session_start(); ?>
<html>
<body>
</body>
</html>
上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。
存储 Session 变量
存储和取回 session 变量的正确方法是使用PHP $_SESSION 变量
显示浏览用户数
isset()函数检测是否已设置"views"变量。如果已设置 "views"变量,我们累加计数器。如果 "views"不存在,则我们创建 "views"变量,并把它设置为 1:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
终结 Session
如果您希望删除某些 session数据,可以使用unset()或session_destroy()函数。
unset() 函数用于释放指定的session变量:
<?php
unset($_SESSION['views']);
?>
您也可以通过 session_destroy() 函数彻底终结 session:
<?php
session_destroy();
?>
PHP 错误处理
不同的错误处理方法:
- 简单的 “die()” 语句
- 自定义错误和错误触发器
- 错误报告
die() 函数
第一个例子展示了一个打开文本文件的简单脚本:
<?php
$file=fopen("welcome.txt","r");
?>
如果文件不存在,您会获得类似这样的错误:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
现在,假如文件不存在,您会得到类似这样的错误消息:
File not found
异常处理
异常(Exception)用于在指定的错误发生时改变脚本的正常流程。
Try, throw 和 catch
要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。
正确的处理程序应当包括:
- Try - 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
- Throw - 这里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”
- Catch - “catch” 代码块会捕获异常,并创建一个包含异常信息的对象
设置顶层异常处理器 (Top Level Exception Handler)
set_exception_handler()函数可设置处理所有未捕获异常的用户定义函数。
PHP 过滤器(Filter)
PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。
什么是外部数据?
- 来自表单的输入数据
- Cookies
- 服务器变量
- 数据库查询结果
函数和过滤器
如需过滤变量,请使用下面的过滤器函数之一:
filter_var()- 通过一个指定的过滤器来过滤单一的变量filter_var_array()- 通过相同的或不同的过滤器来过滤多个变量filter_input- 获取一个输入变量,并对它进行过滤filter_input_array- 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
在下面的例子中,我们用 filter_var() 函数验证了一个整数:
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
Validating 和 Sanitizing
有两种过滤器:
Validating 过滤器:
- 用于验证用户输入
- 严格的格式规则(比如 URL 或 E-Mail 验证)
- 如果成功则返回预期的类型,如果失败则返回 FALSE
Sanitizing 过滤器:
- 用于允许或禁止字符串中指定的字符
- 无数据格式规则
- 始终返回字符串
Mysql数据库
连接到一个 MySQL 数据库
在您能够访问并处理数据库中的数据之前,您必须创建到达数据库的连接。
在 PHP 中,这个任务通过 mysql_connect()函数完成。
语法
mysql_connect(servername,username,password);
创建数据库
CREATE DATABASE 语句用于在 MySQL中创建数据库。
语法
CREATE DATABASE database_name
为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>
创建表
CREATE TABLE用于在 MySQL 中创建数据库表
例子
下面的例子展示了如何创建一个名为"Persons"的表,此表有三列。列名是"FirstName", "LastName"以及"Age":
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table in my_db database
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);
mysql_close($con);
?>
向数据库表插入数据
INSERT INTO 语句用于向数据库表添加新记录。
语法
INSERT INTO table_name
VALUES (value1, value2,....)
您还可以规定希望在其中插入数据的列:
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
实例
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin', '35')");
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire', '33')");
mysql_close($con);
?>
函数
mt_rand($min,$max) 随机数
解决页面乱码:header(content-type:text/html;)