PHP基础知识总结(待更)

                                                PHP
1丶PHP不是纯粹的面向对象,只是基于对象的面向过程语言,纯粹的面向对象必须是支持封装、继承,多态(集中包含重载)的类实现,
而PHP是不支持重载的。

2丶PHP 变量规则:
    变量以 $ 符号开始,后面跟着变量的名称
    变量名必须以字母或者下划线字符开始
    变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
    变量名不能包含空格
    变量名是区分大小写的($y 和 $Y 是两个不一样的变量)

3丶PHP 变量做用域
变量的做用域是脚本中变量可被引用/使用的部分。
PHP 有四种不一样的变量做用域:
local   局部,仅在函数内部做用
global  global 关键字用于函数内访问全局变量。在函数内调用函数外定义的全局变量,咱们须要在函数中的变量前加上 global 关键字:
static  当一个函数完成时,它的全部变量一般都会被删除。然而,有时候您但愿某个局部变量不要被删除。要作到这一点,请在您第一次声明变量时使用 static 关键字:
parameter  参数做用域
局部和全局做用域
在全部函数外部定义的变量,拥有全局做用域。除了函数外,全局变量能够被脚本中的任何部分访问,要在一个函数中访问一个全局变量,
须要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:
参数做用域
参数是经过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,做为函数声明的一部分

4丶echo后面输出字符的话要用单引号链接' '
php接收html文本框里的类容用echo $_POST["name"] //name为input中name的属性的值

5丶PHP echo 和 print 语句
echo 和 print 区别:
echo - 能够输出一个或多个字符串
print - 只容许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

6丶一维数组
$Hero=array("亚索","李青","劫");//定义一个一维数组
print("我玩的最好的英雄是{$Hero[0]}");//{$Hero[0]}取数值里的第一个元素

7丶PHP的数据类型转换属于强制转换,容许转换的PHP数据类型有:
(int)、(integer):转换成整形
(float)、(double)、(real):转换成浮点型
(string):转换成字符串
(bool)、(boolean):转换成布尔类型
(array):转换成数组
(object):转换成对象
PHP数据类型有三种转换方式:
在要转换的变量以前加上用括号括起来的目标类型
使用3个具体类型的转换函数,intval()、floatval()、strval()
使用通用类型转换函数settype(mixed var,string type)

8丶PHP数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
PHP 字符串
一个字符串是一串字符的序列,就像 "Hello world!"。
你能够将任何文本放在单引号和双引号中:
String中      一个字母占1个长度,一个汉字占3个长度
PHP 整型
整数是一个没有小数的数字。
整数规则:
整数必须至少有一个数字 (0-9)
整数不能包含逗号或空格
整数是没有小数点的
整数能够是正数或负数
整型能够用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
PHP 布尔型
布尔型能够是 TRUE 或 FALSE。
$x=true;
$y=false;
布尔型一般用于条件判断
PHP 数组
数组能够在一个变量中存储多个值。
在如下实例中建立了一个数组, 而后使用 PHP var_dump() 函数返回数组的数据类型和值:
对象数据类型也能够用于存储数据。
PHP对象
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是能够包含属性和方法的结构。
而后咱们在类中定义数据类型,而后在实例化的类中使用数据类型:
PHP关键字this就是指向当前对象实例的指针,不指向任何其余对象或类。
PHP NULL 值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 一样可用于数据空值和NULL值的区别。
能够经过设置变量值为 NULL 来清空变量数据:
** var_dump();//打印数据类型和值,而且该函数自带换行
PHP_EOL  //小空格字符
**在PHP中“::”这个叫范围解析操做符,又名域运算符  
“::”符号能够认为是与C语言中的“.”类似的,而它更像C++中(Perl)的::类范围操做符。
  php调用类的内部静态成员,或者是类之间调用就要用::

9丶PHP 常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能做为首字母出现。 (常量名不须要加 $ 修饰符)。
常量值被定义后,在脚本的其余任何地方都不能被改变。
注意: 常量在整个脚本中均可以使用。
设置 PHP 常量
设置常量,使用 define() 函数,函数语法以下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
    name:必选参数,常量名称,即标志符。
    value:必选参数,常量的值。
    case_insensitive :可选参数,若是设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。

10丶PHP 中的字符串变量
字符串变量用于包含有字符的值。
在建立字符串以后,咱们就能够对它进行操做了。您能够直接在函数中使用字符串,或者把它存储在变量中。
在下面的实例中,咱们建立一个名为 txt 的字符串变量,并赋值为 "Hello world!" 。而后咱们输出 txt 变量的值:
字符串变量用于存储并处理文本。
PHP 并置运算符
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值链接起来。
下面的实例演示了如何将两个字符串变量链接在一块儿:
PHP strlen() 函数
有时知道字符串值的长度是颇有用的。
strlen() 函数返回字符串的长度(字符数)。
提示:strlen() 经常用在循环和其余函数中,由于那时肯定字符串什么时候结束是很重要的。(例如,在循环中,咱们须要在字符串中的最后一个字符以后结束循环。)
PHP strpos() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
若是在字符串中找到匹配,该函数会返回第一个匹配的字符位置。若是未找到匹配,则返回 FALSE。
php substr()函数 语法
做用:截取字符串
语法:substr(string,start,length)
php strtoupper()函数 语法
做用:把全部字符转换为大写
语法:strtoupper(string)
php strtolower()函数 语法
做用:把全部字符转换为小写
语法:strtolower(string)

11丶PHP 算术运算符
运算符    名称    描述    实例    结果
x + y    加    x 和 y 的和    2 + 2    4
x - y    减    x 和 y 的差    5 - 2    3
x * y    乘    x 和 y 的积    5 * 2    10
x / y    除    x 和 y 的商    15 / 5    3
x % y    模(除法的余数)    x 除以 y 的余数    5 % 2
- x    取反    x 取反    - 2    -2
a . b    并置    链接两个字符串    "Hi" . "Ha"    HiHa
PHP7+ 版本新增整除运算符 intdiv()

12丶PHP 赋值运算符
在 PHP 中,基本的赋值运算符是 "="。它意味着左操做数被设置为右侧表达式的值。也就是说,"$x = 5" 的值是 5。
运算符    等同于    描述
x = y    x = y    左操做数被设置为右侧表达式的值
x += y    x = x + y    加
x -= y    x = x - y    减
x *= y    x = x * y    乘
x /= y    x = x / y    除
x %= y    x = x % y    模(除法的余数)
a .= b    a = a . b    链接两个字符串

13丶PHP 递增/递减运算符
运算符    名称    描述
++ x    预递增    x 加 1,而后返回 x
x ++    后递增    返回 x,而后 x 加 1
-- x    预递减    x 减 1,而后返回 x
x --    后递减    返回 x,而后 x 减 1

14丶PHP 比较运算符
比较操做符可让您比较两个值:
运算符    名称    描述    实例
x == y    等于    若是 x 等于 y,则返回 true    5==8 返回 false
x === y    恒等于    若是 x 等于 y,且它们类型相同,则返回 true    5==="5" 返回 false
x != y    不等于    若是 x 不等于 y,则返回 true    5!=8 返回 true
x <> y    不等于    若是 x 不等于 y,则返回 true    5<>8 返回 true
x !== y    不恒等于    若是 x 不等于 y,或它们类型不相同,则返回 true    5!=="5" 返回 true
x > y    大于    若是 x 大于 y,则返回 true    5>8 返回 false
x < y    小于    若是 x 小于 y,则返回 true    5<8 返回 true
x >= y    大于等于    若是 x 大于或者等于 y,则返回 true    5>=8 返回 false
x <= y    小于等于    若是 x 小于或者等于 y,则返回 true    5<=8 返回 true

15丶PHP 逻辑运算符
运算符    名称    描述    实例x and y    与    若是 x 和 y 都为 true,则返回 true x=6 y=3 (x < 10 and y > 1) 返回 truex or y    或    若是 x 和 y 至少有一个为 true,则返回 true    x=6 y=3 (x==6 or y==5) 返回 true
x xor y    异或    若是 x 和 y 有且仅有一个为 true,则返回 true x=6 y=3 (x==6 xor y==3) 返回 false //*须要注意一下
x && y    与    若是 x 和 y 都为 true,则返回 true x=6 y=3 (x < 10 && y > 1) 返回 true
x || y    或    若是 x 和 y 至少有一个为 true,则返回 true    x=6 y=3(x==5 || y==5) 返回 false
! x    非    若是 x 不为 true,则返回 true    x=6 y=3 !(x==y) 返回 true
*boolean 型 值为
true 浏览器会输出1
false 浏览器不会输出

16丶PHP 数组运算符
运算符    名称    描述
x + y    集合    x 和 y 的集合
x == y    相等    若是 x 和 y 具备相同的键/值对,则返回 true
x === y    恒等    若是 x 和 y 具备相同的键/值对,且顺序相同类型相同,则返回 true
x != y    不相等    若是 x 不等于 y,则返回 true
x <> y    不相等    若是 x 不等于 y,则返回 true
x !== y    不恒等    若是 x 不等于 y,则返回 true

17丶PHP三元运算符
另外一个条件运算符是"?:"(或三元)运算符 。
语法格式
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,能够省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,不然返回 expr3。

18丶在 PHP 中建立数组
在 PHP 中,array() 函数用于建立数组:
array();
在 PHP 中,有三种类型的数组:
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每一个键关联一个值
多维数组 - 包含一个或多个数组的数组
PHP 数值数组
这里有两种建立数值数组的方法:
自动分配 ID 键(ID 键老是从 0 开始):
$cars=array("Volvo","BMW","Toyota");
人工分配 ID 键:
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";
获取数组的长度 - count() 函数
count() 函数用于返回数组的长度(元素的数量):

19丶PHP 关联数组
关联数组是使用您分配给数组的指定的键的数组。
这里有两种建立关联数组的方法:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
or:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
随后能够在脚本中使用指定的键:
遍历关联数组
遍历并打印关联数组中的全部值,您可使用 foreach 循环,以下所示:
实例
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>

20丶PHP - 数组排序函数
在本章中,咱们将一一介绍下列 PHP 数组排序函数:
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
-------------------------------------------------------
current()    返回数组中的当前元素。
each()    返回数组中当前的键/值对。//已通过时了

21丶PHP 超级全局变量
PHP中预约义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的所有做用域中均可用。
你不须要特别说明,就能够在函数及类中使用。
PHP 超级全局变量列表:
    $GLOBALS
    $_SERVER
    $_REQUEST
    $_POST
    $_GET
    $_FILES
    $_ENV
    $_COOKIE
    $_SESSION

22丶foreach 循环用于遍历数组。
语法
foreach ($array as $value)
{
 要执行代码;
}
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),
在进行下一次循环时,您将看到数组中的下一个值。
foreach遍历数组,as前面必须是已经定义并初始化了的数组,as后面是要被赋予值的变量

23丶PHP 函数
在本章中,咱们将为您讲解如何建立本身的函数。
如要在页面加载时执行脚本,您能够把它放到函数里。
函数是经过调用函数来执行的。
你能够在页面的任何位置调用函数。
建立 PHP 函数
函数是经过调用函数来执行的。
语法
function functionName()
{
要执行的代码;
}
PHP 函数准则:
    函数的名称应该提示出它的功能
    函数名称以字母或下划线开头(不能以数字开头)
PHP 函数 - 添加参数
为了给函数添加更多的功能,咱们能够添加参数。参数相似变量。
参数就在函数名称后面有一个括号内指定。
PHP 函数 - 返回值
如需让函数返回一个值,请使用 return 语句。

24丶PHP 向它运行的任何脚本提供了大量的预约义常量。
不过不少常量都是由不一样的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,以下:
__LINE__
文件中的当前行号。
实例:
<?php
echo '这是第 “ '  . __LINE__ . ' ” 行';
?>
以上实例输出结果为:
这是第 “ 2 ” 行
__FILE__
文件的完整路径和文件名。若是用在被包含文件中,则返回被包含的文件名。
自 PHP 4.0.2 起,__FILE__ 老是包含一个绝对路径(若是是符号链接,则是解析后的绝对路径),
而在此以前的版本有时会包含一个相对路径。
实例:
<?php
echo '该文件位于 “ '  . __FILE__ . ' ” ';
?>
以上实例输出结果为:
该文件位于 “ E:\wamp\www\test\index.php ”
__DIR__
文件所在的目录。若是用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(__FILE__)。除非是根目录,不然目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
实例:
<?php
echo '该文件位于 “ '  . __DIR__ . ' ” ';
?>
以上实例输出结果为:
该文件位于 “ E:\wamp\www\test ”
__FUNCTION__
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值老是小写字母的。
实例:
<?php
function test() {
echo  '函数名为:' . __FUNCTION__ ;
}
test();
?>
以上实例输出结果为:
函数名为:test
__CLASS__
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
在 PHP 4 中该值老是小写字母的。类名包括其被声明的做用区域(例如 Foo\Bar)。
注意自 PHP 5.4 起 __CLASS__ 对 trait 也起做用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
实例:
<?php
class test {
function _print() {
echo '类名为:'  . __CLASS__ . "<br>";
echo  '函数名为:' . __FUNCTION__ ;
}
}
$t = new test();
$t->_print();
?>
以上实例输出结果为:
类名为:test
函数名为:_print
__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的做用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。
其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
<?php
class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
class MyHelloWorld extends Base {
    use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
以上例程会输出:
Hello World!
__METHOD__
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
实例:
<?php
function test() {
echo  '函数名为:' . __METHOD__ ;
}
test();
?>
以上实例输出结果为:
函数名为:test
__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
实例:
<?php
namespace MyProject;
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
?>
以上实例输出结果为:
命名空间为:"MyProject"

25丶在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,
对象是一个由信息及对信息进行处理的描述所组成的总体,是对现实世界的抽象。
在现实世界里咱们所面对的事情都是对象,如计算机、电视机、自行车等。
对象的主要三个特性:
    对象的行为:能够对 对象施加那些操做,开灯,关灯就是行为。
    对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
    对象的表示:对象的表示就至关于身份证,具体区分在相同的行为与状态下有什么不一样。
好比 Animal(动物) 是一个抽象类,咱们能够具体到一只狗跟一只羊,而狗跟羊就是具体的对象,
他们有颜色属性,能够写,能够跑等行为状态。
面向对象内容
    类 − 定义了一件事物的抽象特色。类的定义包含了数据的形式以及对数据的操做。
    对象 − 是类的实例。
    成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,可是能够经过成员函数访问,在类被实例化为对象后,
    该变量便可称为对象的属性。
    成员函数 − 定义在类的内部,可用于访问对象的数据。
    继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
    在定义和实现一个类的时候,能够在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容做为本身的内容,
    并加入若干新的内容。
    父类 − 一个类被其余类继承,可将该类称为父类,或基类,或超类。
    子类 − 一个类继承其余类称为子类,也可称为派生类。
    多态 − 多态性是指相同的操做或函数、过程可做用于多种类型的对象上并得到不一样的结果。
    不一样的对象,收到同一消息能够产生不一样的结果,这种现象称为多态性。
    重载 − 简单说,就是函数或者方法有一样的名称,可是参数列表不相同的情形,这样的同名不一样参数的函数或者方法之间,
    互相称之为重载函数或者方法。
    抽象性 − 抽象性是指将具备一致的数据结构(属性)和行为(操做)的对象抽象成类。
    一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其余一些无关内容。
    任何类的划分都是主观的,但必须与具体的应用有关。
    封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一块儿,并放置在一个逻辑单元内。
    构造函数 − 主要用来在建立对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一块儿使用在建立对象的语句中。
    析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),
    系统自动执行析构函数。析构函数每每用来作"清理善后" 的工做(例如在创建对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

26丶变量 $this 表明自身的对象。
PHP 构造函数
构造函数 ,是一种特殊的方法。主要用来在建立对象时初始化对象, 即为对象成员变量赋初始值,
总与new运算符一块儿使用在建立对象的语句中。
PHP 5 允行开发者在一个类中定义一个方法做为构造函数,语法格式以下:
void __construct ([ mixed $args [, $... ]] )
在上面的例子中咱们就能够经过构造方法来初始化 $url 和 $title 变量:
function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}
析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
PHP 5 引入了析构函数的概念,这相似于其它面向对象的语言,其语法格式以下:
void __destruct ( void )
方法重写
若是从父类继承的方法不能知足子类的需求,能够对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
访问控制
PHP 对属性或方法的访问控制,是经过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
    public(公有):公有的类成员能够在任何地方被访问。
    protected(受保护):受保护的类成员则能够被其自身以及其子类和父类访问。
    private(私有):私有的类成员则只能被其定义所在的类访问。
属性的访问控制
类属性必须定义为公有,受保护,私有之一。若是用 var 定义,则被视为公有。
接口
使用接口(interface),能够指定某个类必须实现哪些方法,但不须要定义这些方法的具体内容。
接口是经过 interface 关键字来定义的,就像定义一个标准的类同样,但其中定义全部的方法都是空的。
接口中定义的全部方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操做符。类中必须实现接口中定义的全部方法,不然会报一个致命错误。
类能够实现多个接口,用逗号来分隔多个接口的名称。
常量
能够把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不须要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
自PHP 5.3.0 起,能够用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。
抽象类
任何一个类,若是它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的全部抽象方法;另外,这些方法的访问控制必须和父类中同样(或者更为宽松)。
例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,
则二者的声明并没有冲突。
Static 关键字
声明类属性或方法为 static(静态),就能够不实例化类而直接访问。
静态属性不能经过一个类已实例化的对象来访问(但静态方法能够)。
因为静态方法不须要经过对象便可调用,因此伪变量 $this 在静态方法中不可用。
静态属性不能够由对象经过 -> 操做符来访问。
自 PHP 5.3.0 起,能够用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
Final 关键字
PHP 5 新增了一个 final 关键字。若是父类中的方法被声明为 final,则子类没法覆盖该方法。若是一个类被声明为 final,则不能被继承。
调用父类构造方法
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,须要在子类的构造方法中调用 parent::__construct()

27丶 <select multiple="multiple" name="q[]">  multiple="multiple"设置下拉列表框可多选
表单验证
咱们应该尽量的对用户的输入进行验证(经过客户端脚本)。浏览器验证速度更快,而且能够减轻服务器的压力。
若是用户输入须要插入数据库,您应该考虑使用服务器验证。在服务器验证表单的一种好的方式是,
把表单的数据传给当前页面(异步提交的方式更好),而不是跳转到不一样的页面。
这样用户就能够在同一张表单页面获得错误信息。用户也就更容易发现错误了。
什么是 htmlspecialchars()方法?
htmlspecialchars() 函数把一些预约义的字符转换为 HTML 实体,通常用于GET,htmlspecialchars($_GET[""]) 。
预约义的字符是:
    & (和号) 成为 &amp;
    " (双引号) 成为 &quot;
    ' (单引号) 成为 &#039;
    < (小于) 成为 &lt;
    > (大于) 成为 &gt;
什么是 $_SERVER["PHP_SELF"] 变量?
$_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。
因此, $_SERVER["PHP_SELF"] 会发送表单数据到当前页面,而不是跳转到不一样的页面。
PHP表单中需引发注重的地方?
$_SERVER["PHP_SELF"] 变量有可能会被黑客使用!
当黑客使用跨网站脚本的HTTP连接来攻击时,$_SERVER["PHP_SELF"]服务器变量也会被植入脚本。
缘由就是跨网站脚本是附在执行文件的路径后面的,所以$_SERVER["PHP_SELF"]的字符串就会包含HTTP连接后面的JavaScript程序代码。
Note    XSS又叫 CSS (Cross-Site Script) ,跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,
嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
指定如下表单文件名为 "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
如今,咱们使用URL来指定提交地址 "test_form.php",以上代码修改成以下所示:
<form method="post" action="test_form.php">
这样作就很好了。
可是,考虑到用户会在浏览器地址栏中输入如下地址:
http://www.php.cn/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
以上的 URL 中,将被解析为以下代码并执行:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
代码中添加了 script 标签,并添加了alert命令。 当页面载入时会执行该Javascript代码(用户会看到弹出框)。
 这仅仅只是一个简单的实例来讲明PHP_SELF变量会被黑客利用。
$_SERVER["PHP_SELF"] 能够经过 htmlspecialchars() 函数来避免被利用。

function test_input($data)
{
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
1. 使用 PHP trim() 函数去除用户输入数据中没必要要的字符 (如:空格,tab,换行)。
2. 使用PHP stripslashes()函数去除用户输入数据中的反斜杠 (\)
注意咱们在执行以上脚本时,会经过$_SERVER["REQUEST_METHOD"]来检测表单是否被提交 。
若是 REQUEST_METHOD 是 POST, 表单将被提交 - 数据将被验证。若是表单未提交将跳过验证并显示空白。
在以上实例中使用输入项都是可选的,即便用户不输入任何数据也能够正常显示。


$_GET 变量
预约义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),而且对发送信息的量也有限制。
$_POST 变量
预约义的 $_POST 变量用于收集来自 method="post" 的表单中的值。
从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),而且对发送信息的量也没有限制。
什么时候使用 method="post"?
从带有 POST 方法的表单发送的信息,对任何人都是不可见的,而且对发送信息的量也没有限制。
然而,因为变量不显示在 URL 中,因此没法把页面加入书签。
PHP $_REQUEST 变量
预约义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。
$_REQUEST 变量可用来收集经过 GET 和 POST 方法发送的表单数据。

28丶一个数组中的值能够是另外一个数组,另外一个数组的值也能够是一个数组。依照这种方式,咱们能够建立二维或者三维数组:
实例
<?php
// 二维数组:
$cars = array
(
    array("Volvo",100,96),
    array("BMW",60,59),
    array("Toyota",110,100)
);
print_r($cars);
?>

29丶PHP date() 函数用于格式化时间/日期。
PHP date() 函数
PHP date() 函数可把时间戳格式化为可读性更好的日期和时间。
Tip时间戳是一个字符序列,表示必定的事件发生的日期/时间。
语法
string date ( string $format [, int $timestamp ] )
参数    描述
format    必需。规定时间戳的格式。
timestamp    可选。规定时间戳。默认是当前的日期和时间。
PHP Date() - 格式化日期
date() 函数的第一个必需参数 format 规定了如何格式化日期/时间。
这里列出了一些可用的字符:
    d - 表明月中的天 (01 - 31)
    m - 表明月 (01 - 12)
    Y - 表明年 (四位数)
如需了解 format 参数中可用的全部字符列表,请查阅咱们的 PHP Date 参考手册,date() 函数。
能够在字母之间插入其余字符,好比 "/"、"." 或者 "-",这样就能够增长附加格式了:
<?php
echo date("Y/m/d") . "<br>";
echo date("Y.m.d") . "<br>";
echo date("Y-m-d");
?>
上面代码的输出以下所示:
2016/05/11
2016.05.11
2016-05-11
格式字串能够识别如下 format 参数的字符串format 字符    说明    返回值例子
日    ---    ---
d    月份中的第几天,有前导零的 2 位数字    01 到 31
j    月份中的第几天,没有前导零    1 到 31
星期    ---    ---
W    ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的)    例如:42(当年的第 42 周)
月    ---    ---
m    数字表示的月份,有前导零    01 到 12
M    三个字母缩写表示的月份    Jan 到 Dec
n    数字表示的月份,没有前导零    1 到 12
t    给定月份所应有的天数    28 到 31
年    ---    ---
Y    4 位数字完整表示的年份    例如:1999 或 2003
y    2 位数字表示的年份    例如:99 或 03
时间    ---    ---
a    小写的上午和下午值    am 或 pm
A    大写的上午和下午值    AM 或 PM
h    小时,12 小时格式,有前导零    01 到 12
s    秒数,有前导零    00 到 59>
u    毫秒 (PHP 5.2.2 新加)。须要注意的是            date() 函数老是返回            000000 由于它只接受 integer            参数, 而 DateTime::format() 才支持毫秒。    示例: 654321
时区    ---    ---
e    时区标识(PHP 5.1.0 新加)    例如:UTC,GMT,Atlantic/Azores
I    是否为夏令时    若是是夏令时为 1,不然为 0
O    与格林威治时间相差的小时数    例如:+0200
完整的日期/时间    ---    ---
c    ISO 8601 格式的日期(PHP 5 新加)    2004-02-12T15:19:21+00:00
r    RFC 822 格式的日期    例如:Thu, 21 Dec 2000 16:01:07 +0200
U    从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数    参见 time()
完整的 PHP Date 参考手册
如需查看全部日期函数的完整参考手册,请访问咱们的 完整的 PHP Date 参考手册。
该参考手册提供了每一个函数的简要描述和应用实例!
gettimeofday()    返回当前时间。

mktime(hour,minute,second,month,day,year)//时分秒月天年(Y-m-d h:i:sa)
下面的例子使用 mktime() 函数中的一系列参数来建立日期和时间:
实例
<?php
date_default_timezone_set("Asia/ShangHai");//设置默认位置
echo "如今时间是 " . date("Y.m.d.h:i:sa");//获取当前时间
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "建立日期是 " . date("Y-m-d h:i:sa", $d);
?>

30丶PHP include 和 require 语句
在 PHP 中,您能够在服务器执行 PHP 文件以前在该文件中插入一个文件的内容。
include 和 require 语句用于在执行流中插入写在其余文件中的有用的代码。
include 和 require 除了处理错误的方式不一样以外,在其余方面都是相同的:
    require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会中止执行。
    include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
所以,若是您但愿继续执行,并向用户输出结果,即便包含文件已丢失,那么请使用 include。
不然,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。
这有助于提升应用程序的安全性和完整性,在某个关键文件意外丢失的状况下。
包含文件省去了大量的工做。这意味着您能够为全部网页建立标准页头、页脚或者菜单文件。
而后,在页头须要更新时,您只需更新这个页头包含文件便可。
语法
include 'filename';
或者
require 'filename';

31丶打开文件
fopen() 函数用于在 PHP 中打开文件。
此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪一种模式来打开文件:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
文件可能经过下列模式来打开:
模式    描述
r    只读。在文件的开头开始。
r+    读/写。在文件的开头开始。
w    只写。打开并清空文件的内容;若是文件不存在,则建立新文件。
w+    读/写。打开并清空文件的内容;若是文件不存在,则建立新文件。
a    追加。打开并向文件末尾进行写操做,若是文件不存在,则建立新文件。
a+    读/追加。经过向文件末尾写内容,来保持文件内容。
x    只写。建立新文件。若是文件已存在,则返回 FALSE 和一个错误。
x+    读/写。建立新文件。若是文件已存在,则返回 FALSE 和一个错误。
注释:若是 fopen() 函数没法打开指定文件,则返回 0 (false)。
实例
若是 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:
<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>
关闭文件
fclose() 函数用于关闭打开的文件:
<?php
$file = fopen("test.txt","r");
//执行一些代码
fclose($file);
?>
检测文件末尾(EOF)
feof() 函数检测是否已到达文件末尾(EOF)。
在循环遍历未知长度的数据时,feof() 函数颇有用。
注释:在 w 、a 和 x 模式下,您没法读取打开的文件!
if (feof($file)) echo "文件结尾";
逐行读取文件
fgets() 函数用于从文件中逐行读取文件。
注释:在调用该函数以后,文件指针会移动到下一行。
实例
下面的实例逐行读取文件,直到文件末尾为止:
<?php
$file = fopen("welcome.txt", "r") or exit("没法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
  {
    echo fgets($file). "<br>";
  }
fclose($file);
?>
逐字符读取文件
fgetc() 函数用于从文件中逐字符地读取文件。
注释:在调用该函数以后,文件指针会移动到下一个字符。
实例
下面的实例逐字符地读取文件,直到文件末尾为止:
<?php
$file=fopen("welcome.txt","r") or exit("没法打开文件!");
while (!feof($file))
  {
    echo fgetc($file);
  }
fclose($file);
?>
PHP Filesystem 参考手册
如需查看 PHP 文件系统函数的完整参考手册,请访问咱们的PHP Filesystem 参考手册。
注意:windows文件操做支持的是GBK格式,在PHP中对文件进行操做前要将非GBK文件经过iconv()函数进行转码操做;
$source = iconv("UTF-8","GBK//IGNORE",'‪F:\File\qaq.txt');

32丶cookie 经常使用于识别用户。
Cookie 是什么?
cookie 经常使用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机经过浏览器请求页面时,
这台计算机将会发送 cookie。经过 PHP,您可以建立并取回 cookie 的值。
如何建立 Cookie?
setcookie() 函数用于设置 cookie。
注释:setcookie() 函数必须位于 <html> 标签以前。
语法
setcookie(name, value, expire, path, domain);
实例 1
在下面的例子中,咱们将建立名为 "user" 的 cookie,并为它赋值 "php"。咱们也规定了此 cookie 在一小时后过时:
<?php
setcookie("user", "php", time()+3600);
?>
如何取回 Cookie 的值?
PHP 的 $_COOKIE 变量用于取回 cookie 的值。
在下面的实例中,咱们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:
<?php
// 输出 cookie 值
echo $_COOKIE["user"];
// 查看全部 cookie
print_r($_COOKIE);
?>
**咱们使用 isset() 函数来确认是否已设置了 cookie

33丶PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,
而且对于应用程序中的全部页面都是可用的。
PHP Session 变量
您在计算机上操做某个应用程序时,您打开它,作些更改,而后关闭它。这很像一次对话(Session)。计算机知道您是谁。
它清楚您在什么时候打开和关闭应用程序。然而,在因特网上问题出现了:因为 HTTP 地址没法保持状态,
Web 服务器并不知道您是谁以及您作了什么。
PHP session 解决了这个问题,它经过在服务器上存储用户信息以便随后使用(好比用户名称、购买商品等)。
然而,会话信息是临时的,在用户离开网站后将被删除。若是您须要永久存储信息,能够把数据存储在数据库中。
Session 的工做机制是:为每一个访客建立一个惟一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,
或者经过 URL 进行传导。
开始 PHP Session
在您把用户信息存储到 PHP session 中以前,首先必须启动会话。
注释:session_start() 函数必须位于 <html> 标签以前
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量
unset() 函数用于释放指定的 session 变量
注释:session_destroy() 将重置 session,您将失去全部已存储的 session 数据

34丶&这是引用符号,引用的意思是:不一样的名字访问同一个变量内容。php的引用(就是在变量或者函数、对象等前面加上&符号)。
PHP 的引用容许你用两个变量来指向同一个内容.
<?
$a="AB";
$b =&$a;
echo $a;//这里输出:AB
echo $b;//这里输出:AB
$b="EF";
echo $a;//这里$a的值变为EF 因此输出EF
echo $b;//这里输出EF
?>
exit(),die()和trigger_error()区别?
首先die()同等于exit(),二者若是执行都会停止PHP程序,并且在死以前均可以留句遗言!
exit()和die()惟一不一样的是exit()能够返回0--254状态值,0表示返回成功。trigger_error()生成一个用户警告来代替,
使程序更具备灵活性.例如:trigger_error("Cannotfindfile",E_USER_ERROR);
使用trigger_error()函数来替代die(),你的代码在处理错误上会更具优点,对于客户程序员来讲更易于处理错误。

35丶PHP 过滤器用于验证和过滤来自非安全来源的数据,好比用户的输入。
什么是 PHP 过滤器?
PHP 过滤器用于验证和过滤来自非安全来源的数据。
测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。
为何使用过滤器?
几乎全部的 Web 应用程序都依赖外部的输入。这些数据一般来自用户或其余应用程序(好比 web 服务)。
经过使用过滤器,您可以确保应用程序得到正确的输入类型。
您应该始终对外部数据进行过滤!
输入过滤是最重要的应用程序安全课题之一。
什么是外部数据?
    来自表单的输入数据
    Cookies
    Web services data
    服务器变量
    数据库查询结果
函数和过滤器
如需过滤变量,请使用下面的过滤器函数之一:
    filter_var() - 经过一个指定的过滤器来过滤单一的变量
    filter_var_array() - 经过相同的或不一样的过滤器来过滤多个变量
    filter_input - 获取一个输入变量,并对它进行过滤
    filter_input_array - 获取多个输入变量,并经过相同的或不一样的过滤器对它们进行过滤
使用 Filter Callback
经过使用 FILTER_CALLBACK 过滤器,能够调用自定义的函数,把它做为一个过滤器来使用。
这样,咱们就拥有了数据过滤的彻底控制权。
您能够建立本身的自定义函数,也可使用已存在的 PHP 函数。
将您准备用到的过滤器的函数,按指定选项的规定方法进行规定。在关联数组中,带有名称 "options"。
在下面的实例中,咱们使用了一个自定义的函数把全部 "_" 转换为空格:
<?php
function convertSpace($string)
{
return str_replace("_", ".", $string);
}
$string = "www_php_cn!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>
上面代码的结果以下所示:
实例解释
上面的实例把全部 "_" 转换成 "." :
    建立一个把 "_" 替换为 "." 的函数
    调用 filter_var() 函数,它的参数是 FILTER_CALLBACK 过滤器以及包含咱们的函数的数组
36丶php--------对象(object) 与 数组(array) 的转换
/**
 * 数组 转 对象
 *
 * @param array $arr 数组
 * @return object
 */
function array_to_object($arr) {
    if (gettype($arr) != 'array') {
        return;
    }
    foreach ($arr as $k => $v) {
        if (gettype($v) == 'array' || getType($v) == 'object') {
            $arr[$k] = (object)array_to_object($v);
        }
    }
 
    return (object)$arr;
}
 
/**
 * 对象 转 数组
 *
 * @param object $obj 对象
 * @return array
 */
function object_to_array($obj) {
    $obj = (array)$obj;
    foreach ($obj as $k => $v) {
        if (gettype($v) == 'resource') {
            return;
        }
        if (gettype($v) == 'object' || gettype($v) == 'array') {
            $obj[$k] = (array)object_to_array($v);
        }
    }
 
    return $obj;
}

37丶PHP中echo,print(),print_r()的区别是什么?
echo
能够一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并非真正的函数,
所以不能做为表达式的一部分使用。
print()
函数print()打印一个值(它的参数),若是字符串成功显示则返回true,不然返回false。
print_r()
能够把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。
但print_r()输出布尔值和NULL的结果没有意义,由于都是打印"\n"。所以用var_dump()函数更适合调试。

38丶Validating 和 Sanitizing
有两种过滤器:
Validiting 过滤器:
    用于验证用户输入
    严格的格式规则(好比 URL 或 E-Mail 验证)
    若是成功则返回预期的类型,若是失败则返回 FALSE
Sanitizing 过滤器:
    用于容许或禁止字符串中指定的字符
    无数据格式规则
    始终返回字符串
选项和标志
选项和标志用于向指定的过滤器添加额外的过滤选项。
不一样的过滤器有不一样的选项和标志。

39丶使用 Filter Callback
经过使用 FILTER_CALLBACK 过滤器,能够调用自定义的函数,把它做为一个过滤器来使用。
这样,咱们就拥有了数据过滤的彻底控制权。
您能够建立本身的自定义函数,也可使用已存在的 PHP 函数。
将您准备用到的过滤器的函数,按指定选项的规定方法进行规定。在关联数组中,带有名称 "options"。
在下面的实例中,咱们使用了一个自定义的函数把全部 "_" 转换为空格:
<?php
function convertSpace($string)
{
return str_replace("_", ".", $string);
}
$string = "www_php_cn!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>
上面代码的结果以下所示:
实例解释
上面的实例把全部 "_" 转换成 "." :
    建立一个把 "_" 替换为 "." 的函数
    调用 filter_var() 函数,它的参数是 FILTER_CALLBACK 过滤器以及包含咱们的函数的数组

40丶PHP链接数据库有两种方法
MYSQLi和PDO
我是该用 MySQLi ,仍是 PDO?
若是你须要一个简短的回答,即 "你习惯哪一个就用哪一个"。
MySQLi 和 PDO 有它们本身的优点:
PDO 应用在 12 种不一样数据库中, MySQLi 只针对 MySQL 数据库。
因此,若是你的项目须要在多种数据库中切换,建议使用 PDO ,这样你只须要修改链接字符串和部门查询语句便可。 使用 MySQLi, 若是不一样数据库,你须要从新编写全部代码,包括查询。
二者都是面向对象, 但 MySQLi 还提供了 API 接口。
二者都支持预处理语句。 预处理语句能够防止 SQL 注入,对于 web 项目的安全性是很是重要的。

41丶使用 PDO:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // 设置 PDO 错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE myDBPDO";
    // 使用 exec() ,由于没有结果返回
    $conn->exec($sql);
    echo "数据库建立成功<br>";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>
提示: 使用 PDO 的最大好处是在数据库查询过程出现问题时可使用异常类来 处理问题。
若是  try{ } 代码块出现异常,脚本会中止执行并会跳到第一个 catch(){ } 代码块执行代码。
 在以上捕获的代码块中咱们输出了 SQL 语句并生成错误信息。
执行多条数据库操做时要用到事务
  $conn->beginTransaction();  // 开始事务
   /*要执行的数据操做  */
  $conn->commit();//提交事务
   $conn->rollback();// 若是执行失败事务回滚,若是没有执行开始事务的操做,那么事务回滚会失败

42丶PDO 中的预处理语句
如下实例咱们在 PDO 中使用了预处理语句并绑定参数:
使用预编译更方便多条sql语句的操做
实例 (PDO 使用预处理语句)
$conn = new PDO("mysql:host=$server;dbname=test;charset=utf8", $name, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $smt= $conn->prepare("insert into teacher(name,age) values (:name,:age)");//预处理
    $smt->bindParam(":name",$name);//绑定行
    $smt->bindParam(":age",$age);
    $name="亚索";//给参数赋值
    $age=17;
    $smt->execute();//执行预编译的sql语句
    $name="云韵";//给参数赋值
    $age=19;
    $smt->execute();//执行预编译的sql语句
   $sql="insert into teacher(name,age) value ('剑姬','21')";//增
   $sql="delete from student where sno='31'";//删
   $sql="update student set sname='寒冰',sage='18' where sno='32'";//改
   $stm=$conn->prepare("select * from student where sage=:sage");/查
   $stm->bindParam(":sage",$sage);
   $sage=17;
   $stm->execute();
都采用预编译比较好,预处理语句对于防止 MySQL 注入是很是有用的。

43丶XML 是什么?
XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。

44丶DOM XML 解析器函数是 PHP 核心的组成部分。无需安装就可使用这些函数。
XML 文件
下面的 XML 文件将应用在咱们的实例中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
加载和输出 XML
咱们须要初始化 XML 解析器,加载 XML,并把它输出:
实例
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
print $xmlDoc->saveXML();
?>
以上代码将输出:
ToveJaniReminder Don't forget me this weekend!
若是您在浏览器窗口中查看源代码,会看到下面的 HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面的实例建立了一个 DOMDocument-Object,并把 "note.xml" 中的 XML 载入这个文档对象中。
saveXML() 函数把内部 XML 文档放入一个字符串,这样咱们就能够输出它。
遍历 XML
咱们要初始化 XML 解析器,加载 XML,并遍历 <note> 元素的全部元素:
实例
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
  {
  print $item->nodeName . " = " . $item->nodeValue . "<br>";
  }
?>
以上代码将输出:
#text =
to = Tove
#text =
from = Jani
#text =
heading = Reminder
#text =
body = Don't forget me this weekend!
#text =

45丶PHP SimpleXML 处理最普通的 XML 任务,其他的任务则交由其它扩展处理。
什么是 PHP SimpleXML?
SimpleXML 是 PHP 5 中的新特性。
SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就能够从 XML 元素中读取文本数据。
SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,好比:
    元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。
    属性经过使用关联数组进行访问,其中的索引对应属性名称。
    元素内部的文本被转换为字符串。若是一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。
当执行相似下列的基础任务时,SimpleXML 使用起来很是快捷:
    读取/提取 XML 文件/字符串的数据
    编辑文本节点或属性
然而,在处理高级 XML 时,好比命名空间,最好使用 Expat 解析器或 XML DOM。
安装
从 PHP 5 开始,SimpleXML 函数是 PHP 核心的组成部分。无需安装就可使用这些函数。
PHP SimpleXML 实例
假设咱们有以下的 XML 文件,"note.xml":
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
如今咱们想要输出上面的 XML 文件的不一样信息:
实例 1
输出 $xml 变量(是 SimpleXMLElement 对象)的键和元素:
<?php
$xml=simplexml_load_file("note.xml");
print_r($xml);
?>
以上代码将输出:
SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder
[body] => Don't forget me this weekend! )
实例 2
输出 XML 文件中每一个元素的数据:
<?php
$xml=simplexml_load_file("note.xml");
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo
$xml->body;
?>
以上代码将输出:
Tove
Jani
Reminder
Don't forget me this weekend!
实例 3
输出每一个子节点的元素名称和数据:
<?php
$xml=simplexml_load_file("note.xml");
echo $xml->getName() . "<br>";
foreach($xml->children() as $child)
  {
  echo $child->getName() . ": " . $child . "<br>";
  }
?>
以上代码将输出:
note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!

46丶PHP AJAX
1. XMLHttpRequest 对象的相关方法
1.1 XHR建立对象
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
1.2 向服务端发送请求
xmlhttp.open("GET","test1.txt",true);   //规定请求的类型、URL 以及是否异步处理请求。
xmlhttp.send();    //将请求发送到服务器。
方法参数解释以下:
open(method,url,async)
    method:请求的类型;GET 或 POST
    url:文件在服务器上的位置
    async:true(异步)或 false(同步)
send(string)
    string:仅用于 POST 请求
若是须要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。而后在 send() 方法中规定您但愿发送的数据:
xmlhttp.setRequestHeader("content-type","text/xml;charset=utf-8");    //向请求中添加 HTTP 头
方法参数解释以下:
setRequestHeader(header,value)
    header: 规定头的名称
    value: 规定头的值
1.3 服务器响应
如需得到来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。
    responseText 得到字符串形式的响应数据。
    responseXML 得到 XML 形式的响应数据。
1.4 onreadystatechange 事件
当请求被发送到服务器时,咱们须要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。
    readyState:存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
    status:响应的HTTP状态码。
经过以前的Ajax调用公网服务的代码能够具体的了解XMLHttpRequest对象的使用。
复制代码
var getXmlHttpRequest = function () {
    try{
     //主流浏览器提供了XMLHttpRequest对象
         return new XMLHttpRequest();
    }catch(e){
     //低版本的IE浏览器没有提供XMLHttpRequest对象,IE6如下
     //因此必须使用IE浏览器的特定实现ActiveXObject
         return new ActiveXObject("Microsoft.XMLHTTP");
    }
};
//建立XMLHttpRequest对象
var xhr = getXmlHttpRequest();
//打开链接
xhr.open("post","http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx",true);
//设置数据类型
xhr.setRequestHeader("content-type","text/xml;charset=utf-8");
//设置回调函数
xhr.onreadystatechange=function(){
//判断是否发送成功和判断服务端是否响应成功
if(4 == xhr.readyState && 200 == xhr.status){
    alert(xhr.responseText);
  }
}
//组织SOAP协议数据 篇幅缘由,此处信息省略
var soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>····
   ····";        
//发送数据
xhr.send(soapXML);
2. xmlhttp.readyState==4 && xmlhttp.status==200解析
2.1 readyState(状态值)和status(状态码)的区别
readyState,是指运行AJAX所经历过的几种状态,不管访问是否成功都将响应的步骤,能够理解成为AJAX运行步骤,使用“ajax.readyState”得到
status,是指不管AJAX访问是否成功,由HTTP协议根据所提交的信息,服务器所返回的HTTP头信息代码,使用“ajax.status”得到
整体理解:能够简单的理解为state表明一个总体的状态。而status是这个大的state下面具体的小的状态。
2.2 什么是readyState
readyState是XMLHttpRequest对象的一个属性,用来标识当前XMLHttpRequest对象处于什么状态。
readyState总共有5个状态值,分别为0~4,每一个值表明了不一样的含义
0:初始化,XMLHttpRequest对象尚未完成初始化
1:载入,XMLHttpRequest对象开始发送请求
2:载入完成,XMLHttpRequest对象的请求发送完成
3:解析,XMLHttpRequest对象开始读取服务器的响应
4:完成,XMLHttpRequest对象读取服务器响应结束
2.3 什么是status
status是XMLHttpRequest对象的一个属性,表示响应的HTTP状态码
在HTTP1.1协议下,HTTP状态码总共可分为5大类
1xx:信息响应类,表示接收到请求而且继续处理
2xx:处理成功响应类,表示动做被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动做,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
 
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不肯定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处获得
301——删除请求数据
302——在其余地址发现了请求数据
303——建议客户访问其余URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址获得
306——前一版本HTTP中使用的代码,现行版本中再也不使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求受权失败
402——保留有效ChargeTo头响应
403——请求不容许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不容许javascript

406——根据用户发送的Accept拖,请求资源不可访问
407——相似401,用户必须首先在代理服务器上获得受权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上再也不有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器容许的大小
414——请求的资源URL长于服务器容许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不知足请求Expect头字段指定的指望值,若是是代理服务器,多是下一级服务器不能知足请求
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另外一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本

2.4 思考问题:为何onreadystatechange的函数实现要同时判断readyState和status呢?
第一种思考方式:只使用readyState
var getXmlHttpRequest = function () {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
};
var xhr = getXmlHttpRequest();
xhr.open("get", "1.txt", true);
xhr.send();
xhr.onreadystatechange = function () {
  if (xhr.readyState == 4) {
    alert(xhr.responseText);
  }
};

服务响应出错了,但仍是返回了信息,这并非咱们想要的结果
若是返回不是200,而是404或者500,因为只使用readystate作判断,它不理会放回的结果是200、404仍是500,只要响应成功返回了,就执行接下来的javascript代码,结果将形成各类不可预料的错误。因此只使用readyState判断是行不通的。
第二种思考方式:只使用status判断
var getXmlHttpRequest = function () {
  try{
    return new XMLHttpRequest();
  }catch(e){
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
};
var xhr = getXmlHttpRequest();
xhr.open("get", "1.txt", true);
xhr.send();
xhr.onreadystatechange = function () {
    if (xhr.status == 200) {
        alert("readyState=" + xhr.readyState + xhr.responseText);
    }
};
事实上,结果却不像预期那样。响应码确实是返回了200,可是总共弹出了3次窗口!第一次是“readyState=2”的窗口,
第二次是“readyState=3”的窗口,
第三次是“readyState=4”的窗口。由此,可见onreadystatechange函数的执行不是只在readyState变为4的时候触发的,
而是readyState(二、三、4)的每次变化都会触发,因此就出现了前面说的那种状况。可见,单独使用status判断也是行不通的。
5. readyState和status的前后判断顺序
由上面的试验,咱们能够知道判断的时候readyState和status缺一不可。那么readyState和status的前后判断顺序会不会有影响呢?
咱们能够将status调到前面先判断,代码如 xhr.status == 200 && xhr.readyState == 4
事实上,这对于最终的结果是没有影响的,可是中间的性能就不一样了。由试验咱们知道,
readyState的每次变化都会触发onreadystatechange函数,假如先判断status,那么每次都会多判断一次status的状态。
虽然性能上影响甚微,不过仍是应该抱着追求极致代码的想法,把readyState的判断放在前面。
xhr.readyState == 4 && xhr.status == 200

47丶PHP gettype() 函数
gettype() 函数用于获取变量的类型。
    注意:不要使用 gettype() 来测试某种类型,由于其返回的字符串在将来的版本中可能须要改变。
此外,因为包含了字符串的比较,它的运行也是较慢的。使用 is_* 函数代替。
版本要求:PHP 4, PHP 5, PHP 7
语法
string gettype ( mixed $var )
参数说明:
    $var:变量。
返回值
返回字符串,可能值为:
    boolean
    integer
    double
    string
    array
    object
    resource
    NULL
    unknown type
实例
实例
<?php
echo gettype(102) . PHP_EOL;
echo gettype(true) . PHP_EOL;
echo gettype(' ') . PHP_EOL;
echo gettype(null) . PHP_EOL;
echo gettype(array()) . PHP_EOL;
echo gettype(new stdclass());
?>
输出结果为:
integer
boolean
string
NULL
array
object

48丶Return
若是在一个函数中调用 return 语句,将当即结束此函数的执行并将它的参数做为函数的值返回。
return 也会终止 eval() 语句或者脚本文件的执行。
若是在全局范围中调用,则当前脚本文件停止运行。若是当前脚本文件是被 include 的或者 require 的,
则控制交回调用文件。此外,若是当前脚本是被 include 的,
则 return 的值会被看成 include 调用的返回值。若是在主脚本文件中调用 return,则脚本停止运行。
若是当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件停止运行。
更多信息见返回值。
    Note: 注意既然 return 是语言结构而不是函数,所以其参数没有必要用括号将其括起来。一般都不用括号,实际上也应该不用,
    这样能够下降 PHP 的负担。
    Note: 若是没有提供参数,则必定不能用括号,此时返回 NULL。若是调用 return 时加上了括号却又没有参数会致使解析错误。
    Note: 当用引用返回值时永远不要使用括号,这样行不通。只能经过引用返回变量,而不是语句的结果。若是使用 return ($a);
    时其实不是返回一个变量,而是表达式 ($a) 的值(固然,此时该值也正是 $a 的值)。

49丶PHP eval() 函数
PHP 杂项函数
定义和用法
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
若是没有在代码字符串中调用 return 语句,则返回 NULL。若是代码中存在解析错误,则 eval() 函数返回 false。
语法
eval(phpcode)
参数     描述
phpcode     必需。规定要计算的 PHP 代码。
提示和注释
注释:返回语句会当即终止对字符串的计算。
注释:该函数对于在数据库文本字段中供往后计算而进行的代码存储颇有用。
例子
<?php
$string = "beautiful";
$time = "winter";

$str = 'This is a $string $time morning!';
echo $str. "<br />";

eval("\$str = \"$str\";");
echo $str;
?>
输出:
This is a $string $time morning!
This is a beautiful winter morning!

50丶语法:get_object_var($object),返回一个数组。获取$object对象中的属性,组成一个数组
实例:
<?php
class person{
 public $name="王美人";
 public $age = 25;
 public $birth;
}
$p = new person();
print_r(get_object_vars($p));
?>
输出结果:    
Array ( [name] => 王美人 [age] => 25 [birth] => )

51丶PHP is_array() 函数
PHP 可用的函数PHP 可用的函数
is_array() 函数用于检测变量是不是一个数组。
PHP 版本要求:PHP 4, PHP 5, PHP 7
语法
bool is_array ( mixed $var )
参数说明:
    $var:要检测的变量。
返回值
若是检测的变量是数组,则返回 TRUE,不然返回 FALSE。
实例
实例
<?php
$arr_site = array('Google', 'Runoob', 'Facebook');
if(is_array($arr_site)){
    echo '变量 $arr_site 是一个数组';
} else {
    echo '变量 $arr_site 不是一个数组';
}
?>
输出结果为:
变量 $arr_site 是一个数组



52丶 PHP 正则表达式匹配函数 preg_match 与 preg_match_all
preg_match()
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,不然返回 0 。
语法:    
int preg_match( string pattern, string subject [, array matches ] )
参数说明:
参数    说明
pattern     正则表达式
subject     须要匹配检索的对象
matches     可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,
$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推
例子 1:
<?php
if (preg_match("/php/i", "PHP is the web scripting language of choice.", $matches))
{
    print "A match was found:" . $matches[0];
}
else
{
    print "A match was not found.";
}
输出:    
A match was found:PHP
在该例子中,因为使用了 i 修正符,所以会不区分大小写去文本中匹配 php 。
注意:
preg_match() 第一次匹配成功后就会中止匹配,若是要实现所有结果的匹配,
即搜索到subject结尾处,则需使用 preg_match_all() 函数。
例子 2 ,从一个 URL 中取得主机域名 :    
<?php
// 从 URL 中取得主机名
preg_match("/^(http:\/\/)?([^\/]+)/i","http://blog.snsgou.com/index.php", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
输出:    
域名为:snsgou.com
preg_match_all()
preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),若是出错返回 FALSE 。
语法:
int preg_match_all( string pattern, string subject, array matches [, int flags ] )
参数说明:
参数    说明
pattern     正则表达式
subject     须要匹配检索的对象
matches     存储匹配结果的数组
flags     
可选,指定匹配结果放入 matches 中的顺序,可供选择的标记有:
    PREG_PATTERN_ORDER:默认,对结果排序使 $matches[0] 为所有模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推
    PREG_SET_ORDER:对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推
    PREG_OFFSET_CAPTURE:若是设定本标记,对每一个出现的匹配结果也同时返回其附属的字符串偏移量

下面的例子演示了将文本中全部 <pre></pre> 标签内的关键字(php)显示为红色。    
<?php
$str = "<pre>学习php是一件快乐的事。</pre><pre>全部的phper须要共同努力!</pre>";
$kw = "php";
preg_match_all('/<pre>([\s\S]*?)<\/pre>/', $str, $mat);
for ($i = 0; $i < count($mat[0]); $i++)
{
    $mat[0][$i] = $mat[1][$i];
    $mat[0][$i] = str_replace($kw, '<span style="color:#ff0000">' . $kw . '</span>', $mat[0][$i]);
    $str = str_replace($mat[1][$i], $mat[0][$i], $str);
}
echo $str;
?>

53丶PHP filter_has_var() 函数
PHP Filter 参考手册 完整的 PHP Filter 参考手册
定义和用法
filter_has_var() 函数检查是否存在指定输入类型的变量。
若是成功则返回 TRUE,若是失败则返回 FALSE。
语法
filter_has_var(type, variable)
参数     描述
type     必需。规定要检查的类型。
可能的输入类型:
    INPUT_GET
    INPUT_POST
    INPUT_COOKIE
    INPUT_SERVER
    INPUT_ENV
variable     必需。规定要检查的变量。
实例
在本实例中,输入变量 "name" 被发送到 PHP 页面:
<?php
if(!filter_has_var(INPUT_GET, "name"))
{
echo("Input type does not exist");
}
else
{
echo("Input type exists");
}
?>
代码的输出以下所示:
Input type exists

53丶AJAX RSS 阅读器
在下面的实例中,咱们将演示一个 RSS 阅读器,经过它,来自 RSS 的内容在网页不进行刷新的状况下被载入:
RSS-feed 数据列表...
实例解释 - HTML 页面
当用户在上面的下拉列表中选择某个 RSS-feed 时,会执行名为 "showRSS()" 的函数。该函数由 "onchange" 事件触发:
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
<script>
function showRSS(str)
{
         if (str.length==0)
          {
                   document.getElementById("rssOutput").innerHTML="";
                   return;
          }
          if (window.XMLHttpRequest)
          {
                 // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                 xmlhttp=new XMLHttpRequest();
          }
          else
          {
               // IE6, IE5 浏览器执行代码
               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
          xmlhttp.onreadystatechange=function()
          {
                  if (xmlhttp.readyState==4 && xmlhttp.status==200)
                   {
                          document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;
                   }
          }
          xmlhttp.open("GET","getrss.php?q="+str,true);
          xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select onchange="showRSS(this.value)">
<option value="">选择一个 RSS-feed:</option>
<option value="rss">读取 RSS 数据</option>
</select>
</form>
<br>
<div id="rssOutput">RSS-feed 数据列表...</div>
</body>
</html>

showRSS() 函数会执行如下步骤:
    检查是否有 RSS-feed 被选择
    建立 XMLHttpRequest 对象
    建立在服务器响应就绪时执行的函数
    向服务器上的文件发送请求
    请注意添加到 URL 末端的参数(q)(包含下拉列表的内容)
PHP 文件
文件 rss_demo.xml。
上面这段经过 JavaScript 调用的服务器页面是名为 "getrss.php" 的 PHP 文件:
<?php
// rss 文件php

$xml="rss_demo.xml";
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
// 从 "<channel>" 中读取元素
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
// 输出 "<channel>" 中的元素
echo("<p><a href='" . $channel_link
  . "'>" . $channel_title . "</a>");
echo("<br>");
echo($channel_desc . "</p>");
// 输出 "<item>" 中的元素
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=1; $i++) {
        $item_title=$x->item($i)->getElementsByTagName('title')
        ->item(0)->childNodes->item(0)->nodeValue;
        $item_link=$x->item($i)->getElementsByTagName('link')
        ->item(0)->childNodes->item(0)->nodeValue;
        $item_desc=$x->item($i)->getElementsByTagName('description')
        ->item(0)->childNodes->item(0)->nodeValue;
        echo ("<p><a href='" . $item_link
        . "'>" . $item_title . "</a>");
        echo ("<br>");
        echo ($item_desc . "</p>");
}
?>
当 RSS feed 的请求从 JavaScript 发送到 PHP 文件时,将发生:
    检查哪一个 RSS feed 被选中
    建立一个新的 XML DOM 对象
    在 xml 变量中加载 RSS 文档
    从 channel 元素中提取并输出元素
    从 item 元素中提取并输出元素



54丶1、onchange()
官方解释都是:在元素值改变时触发
但是天真的小编真的觉得,只要是输入框的内容以改变就会触发onchange事件,最终发现,触发是有条件的。
条件:一、绑定onchange事件
           二、输入框当前的值与之前的值是不一致
           三、输入框焦点离开时,才会比较值是否一致(当时我就没有理解这里)
2、onkeyup()
onkeyup():按键弹起时触发
onkeydown():按键按下的时候发生,文字输入以前发生
onkeypress():事件会在键盘按键被按下并释放一个键时发生
按住按键不放,此时会不断的触发onkeydown,可是onkeyup、onkeypress只在按键抬起的时候触发一次。
整个过程是这样的:有键按下—>产生onkeydown事件—>若是是有ASCII码的按键—>产生onkeypress事件—>
有键释放——>产生onkeyup事件
3、总结
在作项目的时候能够看一下相关的相似事件,看看哪一个是真正适合的,这样会避免不少错误的出现。

55丶 php中实现页面跳转的几种方式
PHP中实现页面跳转有一下几种方式,看了几我的写的不是很条理,本身整理一下
在PHP脚本代码中实现
 <?php  header("location:url地址") ?>   例如 <?php  header("location:helloworld.php")?>   
 页面会当即跳转,由于header执行了location重定向
   延迟跳转(好比登录成功后会有几秒钟等待时间,而后跳转到了其余页面)
<?php  header("Refresh:秒数;url=地址")     ?> 例如 <?php   header("Refresh:3;url=helloworld.php")?> 会在3秒后执行跳转
<?php sleep(3); header("location:url地址")?>  调用了sleep()方法,效果也是x秒后执行跳转
在js脚本代码中实现
1.window.location.href方法
<script type="text/javascript">
  window.location.href="helloworld.php"          
</script>
  使用js方法实现延迟跳转
<script type="text/javascript">
  setTimeout("window.location.href='helloworld.php'",3000);
</script>
2.window.location.assign方法  延迟跳转方法同上
<script type="text/javascript">window.location.assign("helloworld.php");
</script>
3.window.location.replace方法  (让新页面替换掉当前页面,不会保存在历史记录里,全部不能使用浏览器后退到原页面了)
<script type="text/javascript">
  window.location.replace("helloworld.php");
</script>
4.window.open方法 三个参数,第一个URL地址。第二个打开新页面方式
(好比新页面_blank,_new,自身跳转_self),第三个是新页面的方式,包括样式,位置等。
<script type="text/javascript">
  window.open("index.php",_blank,width=300px);
</script>
使用HTML脚本代码完成跳转
在<head>标签里执行代码
直接插入这句代码就能够
<meta http-equiv="refresh" content="3;url='helloworld.php'">

56丶可以使用CSS属性:
pointer-events: none;设置<a>标签的disable属性

57丶PHP设置时间随时变化
php的几种获取当前时间的函数
方法一date函数
echo date(‘y-m-d h:i:s’,time());
//2010-08-29 11:25:26
方法二 time函数
$time = time();
echo date("y-m-d",$time) //2010-08-29
方法三 $_server['server_time']
方法四 strftime
echo strftime ("%hh%m %a %d %b" ,time());
18h24 sunday 21 may
还有一个问题就是时区问题,php环境默认时差与北京时间相差8小时,咱们要想获取正确的时间就必须设置
在php文件开始处 加上date_default_timezone_set('prc');
或在php.ini里面 date.timezone=prc;嗾。
记得修改了php.ini要重起apache

58丶PHP 单引号与双引号的区别(总结)
PHP 单引号与双引号的区别
原文地址:http://www.jb51.net/article/21035.htm
看好多代码有时候用单引号或双引号实现包含字符串的内容,其实简单个归纳下双引号中的变量能够解析,单引号就是绝对的字符串。
一、定义字符串   
在PHP中,字符串的定义可使用单引号,也可使用双引号。可是必须使用同一种单或双引号来定义字符串,如:‘Hello"和“
Hello'为非法的字符串定义。   
定义字符串时,只有一种引号被视为定义符,即单引号或双引号。因而,若是一个字符串由双引号开始,那么只有双引号被分析器解析。
这样,你就能够在双引号串中包含任何其余字符,甚至单引号。下面的引号串都是合法的:
Php代码
复制代码 代码以下:
$s = "I am a 'single quote string' inside a double quote string";
$s = 'I am a "double quote string" inside a single quote string';
$s = "I am a 'single quote string' inside a double quote string";
$s = 'I am a "double quote string" inside a single quote string';   
而串 "Why doesn't "this" work?" 则会被分为三段。若是在这个串中想要表示出双引号,则可使用转义符"\"(反斜线),
变成 "Why doesn't \"this\" work?" 便可。
二、字符串变量中的单、双引号  
PHP容许咱们在双引号串中直接包含字串变量,咱们能够发现下面的两个字串的处理结果是相同的。
复制代码 代码以下:
$full_name = $first_name . ' ' . $last_name;
$full_name = "$first_name $last_name";   
单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容能够被解释并且替换,
而单引号串中的内容总被认为是普通字符。例如:
Php代码
复制代码 代码以下:
$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n
$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n   
正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\\和插入单引号\')。因此,当你想在字串中进行变量代换和包 含\n(换行符)等转义序列时,你应该使用双引号。单引号串能够用在其余任何地方,脚本中使用单引号串处理速度会更快些,由于PHP语法分析器对单引号串 的处理方式比较单纯,而双引号的处理因为串内部也须要解析,所以更复杂些,因此处理速度略慢。   
在字符串中引用复杂的变量组合时,可能会产生一些问题,下面的代码会正常工做:
Php代码
复制代码 代码以下:
echo "value = $foo";
echo "value = $a[$i]";
echo "value = $foo";
echo "value = $a[$i]";   
而下面的代码却不能获得咱们但愿的结果:
echo "value = $a[$i][$j]"; //咱们但愿打印二维数组$a的某个元素。   
为避免这些字串使用中的潜在问题,咱们一般把复杂的变量从字串中分离开来,就像这样:echo 'value =
' . $a[$i][$j];//字符串的链接用点(.)   
还有一种办法是将复杂变量用花括号括起来,语法分析器就能正确辨认了:
echo "value = {$a[$i][$j]}" //打印二维数组$a的某个元素   
三、在SQL语句中  
这是会常常遇到的问题,在插入数据库的SQL语句是采用单引号来定义字符串,若是要将一个含有单引号的字符串插入数据库,
这个SQL语句就会出错。
如:$sql="insert into userinfo (username,password) Values('O'Kefee','123456')"   
此时,处理的方法之一是在SQL语句中加入转义符反斜线,
即:……Values('O\'Kefee',……   
固然也可使用函数 addslashes(),该函数的功能就是加入转义符,
即:$s = addslashes("O'Kefee") ……Values('".$s."',……   
还有一种方法是设置php.ini中的magic-quotes选项,打开该选项,则经过表单提交的信息中若是有单引号是,将会自动加上如转义符。所以不用使用其余函数了。
补充: 这就要从双引号和单引号的做用讲起: 双引号里面的字段会通过编译器解释而后再看成HTML代码输出,可是单引号里面的不须要解释,直接输出。
例如:
复制代码 代码以下:
$abc='I love u';
echo $abc //结果是:I love u
echo '$abc' //结果是:$abc
echo "$abc" //结果是:I love u
因此在对数据库里面的SQL语句赋值的时候也要用在双引号里面SQL="select a,b,c from ..." 可是SQL语句中会有单引号把字段名引出来
例如:select * from table where user='abc';
这里的SQL语句能够直接写成SQL="select * from table where user='abc'"
可是若是象下面:
复制代码 代码以下:
$user='abc';
SQL1="select * from table where user=' ".$user." ' ";对比一下
SQL2="select * from table where user=' abc ' "
我把单引号和双引号之间多加了点空格,但愿你能看的清楚一点。
也就是把'abc' 替换为 '".$user."'都是在一个单引号里面的。只是把整个SQL字符串分割了。 SQL1能够分解为如下3个部分
1:"select * from table where user=' "
2:$user
3:" ' "
字符串之间用 . 来链接,这样能明白了吧。
1、引号定义字符串
  在PHP中,一般一个字符串被定义在一对引号中,如:
'I am a string in single quotes'
"I am a string in double quotes"
  PHP语法分析器是用成对的引号来判断一个字符串的。所以,全部字符串必须使用同一种单或者双
引号来定义开始和结束。例如,下面的字串定义是不合法的:
"I am not a valid string since I have unmatching quote marks'
'Me neither!"
  定义字符串时,只有一种引号被视为定义符,即单引号或双引号。因而,若是一个字符串由双引
号开始,那么只有双引号被分析器解析。这样,你就能够在双引号串中包含任何其余字符,甚至单引
号。下面的引号串都是合法的:
$s = "I am a 'single quote string' inside a double quote string";
$s = 'I am a "double quote string" inside a single quote string';
  当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,因而:
"Why doesn't "this" work?"
  实际上被PHP语法分析器分红三个部分:
"Why doesn't "——包含一个单引号的双引号串
this——多余的字符,分析器没法处理
" work?" ——普通字符串
  上面的这个例子企图在双引号串中包含双引号,而分析器在遇到第二个双引号时便认为字符串结
束了。要达到包含引号的目的,必须分析器在遇到串内普通引号的时候忽略它的原意,咱们在引号的
前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:
"Why doesn't \"that\" work?"
  在英文字符串中一个常见的问题是撇号'的使用,由于它就是一个单引号,而在英文串中十分常见
(英文全部格)。你必须当心处理这些字符:
'You\'d better escape your apostrophes'
  能够看到反斜杠在字符串中有他的特殊含义,当咱们须要在字符串中包含反斜杠自己时,须要在
该符号前面多加一个反斜杠。例如:
$file = "c:\windows\system.ini";
echo $file; // 打印结果为: c:windowssystem.ini
$file = "c:\\windows\\system.ini";
echo $file; // 打印结果为: c:\windows\system.ini
  另外一种字符串定义方式,可以消除特殊字符的烦恼,并且便于引用较长的文本。该字符串定义方
法以<<<符号紧跟一个自定义字符串开头,最后一行以该自定义字符串结束,而且必须顶格。
2、字串的链接
  字串可使用字串链接符(.)来链接,如:
$first_name = 'Charlie';
$last_name = 'Brown';
$full_name = $first_name . ' ' . $last_name;
  常见的用途是创建大块的HTML字串代码,赋值号 (=) 链接符 (.) 能够被简写合并为 (.=) 符
号,如:
$html = '<table>';
$html .= '<tr><td>number</td><td>square</td></tr>';
for ( $i=0 ; $i<10 ; $i++) {
$square = $i * $i;
$html .= '<tr><td>' . $i . '</td><td>' . $square . '</td></tr>';
}
$html .= '</table>';
3、在字串中使用变量
  这个功能让你无须使用链接符号来粘和大量的简单字符串。PHP容许咱们在双引号串中直接包含字
串变量,咱们能够发现下面的两个字串的处理结果是相同的。
$full_name = $first_name . ' ' . $last_name;
$full_name = "$first_name $last_name";
  单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容能够被解释并且替换,而单引
号串中的内容总被认为是普通字符。例如:
$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n
  正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\\和插入单
引号\')。因此,当你想在字串中进行变量代换和包含\n(换行符)等转义序列时,你应该使用双引
号。单引号串能够用在其余任何地方,脚本中使用单引号串处理速度会更快些,由于PHP语法分析器对
单引号串的处理方式比较单纯,而双引号的处理因为串内部也须要解析,所以更复杂些,因此处理速
度略慢。
  在字符串中引用复杂的变量组合时,可能会产生一些问题,下面的代码会正常工做:
echo "value = $foo";
echo "value = $a[$i]";
  而下面的代码却不能获得咱们但愿的结果:
echo "value = $a[$i][$j]"; //咱们但愿打印二维数组$a的某个元素。
  为避免这些字串使用中的潜在问题,咱们一般把复杂的变量从字串中分离开来,就像这样:
echo 'value = ' . $a[$i][$j];
  还有一种办法是将复杂变量用花括号括起来,语法分析器就能正确辨认了:
echo "value = {$a[$i][$j]}" //打印二维数组$a的某个元素
  这样,又出现新问题了。当咱们想在字串中引用花括号字符自己时,就要记得使用转义符了:
$var = 3;
echo "value = {$var}"; // 打印结果 "value = 3"
echo "value = \{$var}"; // 打印结果 "value = \{3}"
因为转义字符对{}进行了其余处理\p{xx},不适用此例,能够以下代替:
var_dump("value = {".$var."}") ; // 打印结果 "value = {3}"
3、斜杠和SQL语句
  生成HTML代码或SQL查询语句是编写PHP程序时常常遇到并且是件有趣的事情。为何这么说呢,
由于这涉及到生成另一种类型的代码,你必须仔细地考虑和遵循这种代码所要求的编写语法和规
则。
  咱们来看这样一个例子,假如你想查询数据库中名字是“O'Keefe”的用户,一般SQL语句的形式
是这样的:
select * from users where last_name = 'O\'Keefe'
  请注意SQL语句这个英文全部格(撇号)需使用反斜杠转义。PHP专门提供了一些函数来处理这样
的状况,函数AddSlashes($str)的用途就是自动在字串中对引号字符插入反斜杠转义符:
$last_name = "O'Keefe";
$sql = "select * from users where last_name = '" . addslashes($last_name) . "'";
  在这个例子中,你还要在last_name字串外面括上单引号(SQL语法要求),因为这里使用的是双
引号串,因此对这对单引号就无须使用转义了。下面的这个语句是使用单引号串的等价形式:
$sql = 'select * from users where last_name = \'' . addslashes($last_name) . '\'';
  任什么时候候你要在数据库中写入字串,你都必须确保里面的引号正确使用了转义符号,这是不少PHP
初学者常犯的错误。
4、双引号和HTML
  与SQL语句不一样,在标准HTML语言中双引号常被用来表示字串(如今不少浏览器具有较强的容错功
能,容许在HTML中用单引号甚至不用引号表示字符串),例如:
$html = '<a href="'.$url.'">'.$link.'</a>';
$html = "<a href=\"$url\">$link</a>";
  HTML语言不支持反斜杠转义,这一点在咱们使用表单的hidden inputs来传输数据的时候就会有所
体会了。设置hidden inputs的值的最好办法,是使用htmlspecialchars()函数来编码。下面的语句可
以正常传输一个可能包含双引号的数据:
  <input type=hidden name=var value="<?php echo htmlspecialchars($var) ?>">
1、引号定义字符串。要达到包含引号的目的, 必须分析器在遇到串内普通引号的时候忽略它的原意,
咱们在引号的 前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:单引号串能够用在其余任何地方,
脚本中使用单引号串处理速度会更快些,由于PHP语法分析器对 单引号串的处理方式比较单纯,
而双引号的处理因为串内部也须要解析,所以更复杂些,因此处理速 度略慢。
这个...双引号转义,单引号不转义
如:/r/n是换行,可是若是你用单引号写入文件,不会是换行,而是一个字符,若是用双引号写入文件,就是换行.
赞成。

59.Jquery的parent和parents(找到某一特定的祖先元素)用法
parent是指取得一个包含着全部匹配元素的惟一父元素的元素集合。
parents则是取得一个包含着全部匹配元素的祖先元素的元素集合(不包含根元素)。能够经过一个可选的表达式进行筛选。
parent取得很明确就是当前元素的父元素
parents则是当前元素的祖先元素

60. PHP类中self和$this的区别
1.self表明类,$this表明对象
2.能用$this的地方必定使用self,能用self的地方不必定能用$this
静态的方法中不能使用$this,静态方法给类访问的。
self调用的是类,而$this调用的则是实例化的对象

html

相关文章
相关标签/搜索