php

##PHP串讲

###PHP 语法

PHP 脚本以 <?php 开始,以 ?> 结束:

<?php

// PHP 代码

?>

PHP 中的注释:`// /* */`

###PHP 变量

一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线

<?php

$var = Bob;

$Var = Joe;

echo "$var, $Var"; // 输出 "Bob, Joe"

$4site = not yet; // 非法变量名;以数字开头

$_4site = not yet; // 合法变量名;以下划线开头

$i站点is = mansikka; // 合法变量名;可以用中文

?>

PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用

<?php

$foo = Bob; // 将 Bob 赋给 $foo

$bar = &$foo; // 通过 $bar 引用 $foo

$bar = "My name is $bar"; // 修改 $bar 变量

echo $bar;

echo $foo; // $foo 的值也被修改

?>

###PHP 常量

合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线

<?php

// 合法的常量名

define("FOO", "something");

define("FOO2", "something else");

define("FOO_BAR", "something more");

// 非法的常量名

define("2FOO", "something");

// 下面的定义是合法的,但应该避免这样做:(自定义常量不要以__开头)

// 也许将来有一天 PHP 会定义一个 __FOO__ 的魔术常量

// 这样就会与你的代码相冲突

define("__FOO__", "something");

?>

###PHP表达式

最基本的表达式形式是常量和变量。`$a = 5;`

稍微复杂的表达式例子就是函数

function foo ()

{

return 4;

}

一个常用到表达式类型是比较表达式。这些表达式求值 false 或 true。PHP 支持 >(大于),>=(大于等于),==(等于),!=(不等于),<(小于),<= (小于等于)

- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。

- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

三元条件运算符 `$first ? $second : $third`

<?php

function double($i)

{

return $i*2;

}

$b = $a = 5; /* assign the value five into the variable $a and $b */

$c = $a++; /* a==6,c==5

$e = $d = ++$b; /* b=d=e=6

/* at this point, both $d and $e are equal to 6 */

$f = double($d++); /* assign twice the value of $d before

the increment, 2*6 = 12 to $f */

$g = double(++$e); /* assign twice the value of $e after

the increment, 2*7 = 14 to $g */

$h = $g += 10; /* first, $g is incremented by 10 and ends with the

value of 24. the value of the assignment (24) is

then assigned into $h, and $h ends with the value

of 24 as well. */

?>

###PHP 字符串变量

并置运算符 (.) 用于把两个字符串值连接起来

`$txt1 . " " . $txt2; `

strlen() 函数返回字符串的长度(字节数)

`strlen("Hello world!"); `

strpos() 函数用于在字符串内查找一个字符或一段指定的文本

`strpos("Hello world!","world"); `

###PHP 运算符

#### PHP 算术运算符

(img)

#### PHP 赋值运算符

(img)

#### PHP 递增/递减运算符

(img)

#### PHP 比较运算符

(img)

#### PHP 逻辑运算符

(img)

##PHP If...Else 语句

- if 语句 - 在条件成立时执行代码

- if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码

- if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块

- switch 语句 - 在若干条件之一成立时执行一个代码块

if (条件)

{

if 条件成立时执行的代码;

}

elseif (条件)

{

elseif 条件成立时执行的代码;

}

else

{

条件不成立时执行的代码;

}

##PHP Switch 语句

工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。

switch (n)

{

case label1:

如果 n=label1,此处代码将执行;

break;

case label2:

如果 n=label2,此处代码将执行;

break;

default:

如果 n 既不等于 label1 也不等于 label2,此处代码将执行;

}

##PHP 数组

三种类型的数组:

- 数值数组 - 带有数字 ID 键的数组

- 关联数组 - 带有指定的键的数组,每个键关联一个值

- 多维数组 - 包含一个或多个数组的数组

#### PHP 数值数组

$cars=array("Volvo","BMW","Toyota");

echo "I like " . $cars[0] . ", " . $cars[1] . " and " .$cars[2] . ".";

获取数组的长度 - count() 函数 `echo count($cars);`

遍历数值数组,遍历并打印数值数组中的所有值,可以使用 for 循环

for($x=0;$x<$arrlength;$x++)

{

echo $cars[$x];

echo "<br>";

}

#### PHP 关联数组-字典

`$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");`

or

$age[Peter]="35";

$age[Ben]="37";

$age[Joe]="43";

遍历并打印关联数组中的所有值,可以使用 foreach 循环

foreach($age as $x=>$x_value)

{

echo "Key=" . $x . ", Value=" . $x_value;

echo "<br>";

}

##PHP 数组排序

- sort() - 对数组进行升序排列

- rsort() - 对数组进行降序排列

- asort() - 根据关联数组的值,对数组进行升序排列

- ksort() - 根据关联数组的键,对数组进行升序排列

- arsort() - 根据关联数组的值,对数组进行降序排列

- krsort() - 根据关联数组的键,对数组进行降序排列

##PHP 超级全局变量

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

##PHP 循环 - While 循环

在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。

在 PHP 中,提供了下列循环语句:

- while - 只要指定的条件成立,则循环执行代码块

- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环

- for - 循环执行代码块指定的次数

- foreach - 根据数组中每个元素来循环代码块

## PHP 函数

函数的名称应该提示出它的功能

函数名称以字母或下划线开头(不能以数字开头)

function functionName()

{

// 要执行的代码

}

##PHP 魔术常量

`__LINE__`文件中的当前行号

`__FILE__`文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

`__DIR__`文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

`__FUNCTION__、__CLASS__、__TRAIT__、__METHOD__、__NAMESPACE__ `

##PHP 面向对象

- 类使用 class 关键字后加上类名定义。

- 类名后的一对大括号(\{\})内可以定义变量和方法。

- 类的变量使用 var 来声明, 变量也可以初始化值。

- 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。

class Site {

/* 成员变量 */

var $url;

var $title;

/* 成员函数 */

function setUrl($par){

$this->url = $par;

}

function getUrl(){

echo $this->url . PHP_EOL;

}

function setTitle($par){

$this->title = $par;

}

function getTitle(){

echo $this->title . PHP_EOL;

}

}

#### PHP 构造函数

function __construct( $par1, $par2 ) {

$this->url = $par1;

$this->title = $par2;

}

####继承

class Child extends Parent {

// 代码部分

}

####访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

- public(公有):公有的类成员可以在任何地方被访问。

- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。

- private(私有):私有的类成员则只能被其定义所在的类访问。

####接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

// 声明一个iTemplate接口

interface iTemplate

{

public function setVariable($name, $var);

public function getHtml($template);

}

// 实现接口

class Template implements iTemplate

{

private $vars = array();

public function setVariable($name, $var)

{

$this->vars[$name] = $var;

}

public function getHtml($template)

{

foreach($this->vars as $name => $value) {

$template = str_replace({ . $name . }, $value, $template);

}

return $template;

}

}

####常量

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。

常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)

` const constant = 常量值;`

####抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

定义为抽象的类不能被实例化。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的

#### Static 关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

#### Final 关键字

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。