php是一种创建动态交互性站点的强有力的服务器端脚本语言
php能够生成动态页面内容,创建、打开、读取、写入、删除以及关闭服务器上的文件
php能够接收表单数据,发送并取回cookies;能够添加、删除、修改数据库中的数据
php能限制用户访问网站中的某些页面,能够对数据进行加密
php不仅能输出HTML,还能输出图像、PDF文件、甚至Flash影片。可以输出任何文本,比如XHTML和XML
php能运行于各种平台,且能兼容几乎所有服务器,支持多种数据库,可高效地运行在服务器端
php脚本可放置于文档中的任何位置
可变函数,即通过变量的值来调用函数,因为变量的值是可变的
php的注释
//和#是单行注释
/* */多行注释
php所有用户定义的函数、类和关键字(例如if、else、echo等等)都对大小写不敏感,不过所有变量都对大小写敏感
变量以$符号开头,其后是变量的名称;变量名称必须以字母或下划线开头,不能以数字开头
变量名称只能包含字母数字字符和下划线(A-z、0-9以及_)
变量会在首次为其赋值时被创建
php有三种不同的变量作用域:local(局部)、global(全局)、static(静态)
全局变量不能在函数中使用,若想使用只能在函数内部变量前使用global关键字
PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
static 关键词
当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要更进一步的工作。要完成这一点,请在您首次声明变量时使用 static 关键词。然后,每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息
该变量仍然是函数的局部变量
php输出
echo能够输出一个以上的字符串,而print只能输出一个字符串,并始终返回1
echo比print稍快,因为它不返回任何值
echo和print都是一个语言结构,有无括号均可使用:echo或echo()、print或print()
<?php
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");
echo $txt1;
echo "<br>";
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
echo "<br>";
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
?>
print $txt1;
print "<br>";
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";
print "<br>";
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";
数据类型
字符串
可以是引号内任何文本,可使用单引号或双引号
整数
可用三种格式规定整数:十进制、十六进制或八进制
var_dump() 会返回变量的数据类型和值
数组
$cars=array("Volvo","BMW","SAAB");
var_dump($cars);
对象
对象是存储数据和有关如何处理数据的信息的数据类型。在PHP中必须明确地声明对象
使用class先声明对象的类,在类的实例中使用此数据类型
<?php
class Car
{
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
class Car
{
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
?>
NULL值
特殊的NULL值表示变量无值。NULL是数据类型NULL唯一可能的值
NULL值标示变量是否为空。也用于区分空字符与空值数据库,也可通过把值设置为NULL将变量清空
<?php
$x="Hello world!";
$x=null;
var_dump($x);
$x="Hello world!";
$x=null;
var_dump($x);
?>
字符串函数
strlen()函数返回字符串的长度,以字符计
strpos()函数用于检索字符串内指定的字符或文本
echo strpos("Hello world!","world");
常量是单个值的标识符。在脚本中无法改变改值
有效的常量名以字符或下划线开头(常量名称前面没有$符号)
常量贯穿整个脚本是自动全局的
定义对大小写敏感的常量
define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
定义对大小写不敏感的常量
define("GREETING", "Welcome to W3School.com.cn!", true);
echo greeting;
串接 . $txt2 = $txt1."word!"
串接赋值 .= $txt .= "word!"
=== 表示全等,相等并且类型相同
<> 不等于时 返回true
!== 不全等时 返回true
逻辑运算符
and 与
or 或
xor 异或
&& 与
|| 或
! 非
数组运算符
+ 联合
== 相等
=== 全等
!= 不相等
<> 不相等
!== 不全等
php能正常使用if和switch语句
循环
while、do...while、for、foreach
foreach循环只适合于数组,并用于遍历数组中的每个键值对
<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
echo "$value <br>";
}
?>
函数
php真正力量来自它的函数:它拥有超过1000个内建函数
除了内建函数,还可以创建自己的函数。函数只有被调用时才会执行
内置函数
用于操作的字符串变量 = str_replace("要替换的字符串","用于替换的字符串",用于操作的字符串变量);
判断函数是否存在 function_exists('func')
创建自定义函数
定义函数声明以function开头
function functionName() {
被执行的代码;
被执行的代码;
}
函数名能以字母或下划线开头(而非数字),函数名对大小写不敏感
参数
<?php
function familyName($fname,$year) {
echo "$fname Zhang. Born in $year <br>";
function familyName($fname,$year) {
echo "$fname Zhang. Born in $year <br>";
}
familyName("Li","1975");
familyName("Hong","1978");
familyName("Tao","1983");
familyName("Hong","1978");
familyName("Tao","1983");
?>
默认参数值
<?php
function setHeight($minheight=50) {
echo "The height is : $minheight <br>";
function setHeight($minheight=50) {
echo "The height is : $minheight <br>";
}
setHeight(350);
setHeight(); // 将使用默认值 50
setHeight(135);
setHeight(80);
?>
setHeight(); // 将使用默认值 50
setHeight(135);
setHeight(80);
?>
返回值
<?php
function sum($x,$y) {
$z=$x+$y;
return $z;
function sum($x,$y) {
$z=$x+$y;
return $z;
}
echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>
数组
PHP 中, array() 函数用于创建数组
$cars=array("Volvo","BMW","SAAB");
php有三种数组类型:索引数组、关联数组和多维数组
count() 函数用于返回数组的长度(元素数)
遍历索引数组
<?php
$cars=array("Volvo","BMW","SAAB");
$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo "<br>";
}
?>
echo $cars[$x];
echo "<br>";
}
?>
关联数组
关联数组是使用您分配给数组的指定键的数组
两种创建关联数组的方法:
一、$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
二、
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
随后可以在脚本中使用指定键:
<?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
遍历关联数组:
<?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
数组排序
sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序
超全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们
多维数组
php能理解2、3、4或5级甚至更多级的多维数组。超过3级的数组对于大多数人难以管理
数组的维度指示您需要选择元素的索引数
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
<?php
for ($row = 0; $row < 4; $row++) {
echo "<p><b>Row number $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$cars[$row][$col]."</li>";
}
echo "</ul>";
}
for ($row = 0; $row < 4; $row++) {
echo "<p><b>Row number $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$cars[$row][$col]."</li>";
}
echo "</ul>";
}
?>
日期和时间
date()函数用于对日期或时间进行格式化
date()函数把时间戳格式化为更易读的日期和时间
date(format,timestamp)format为必选,规定时间戳的格式;timestamp为可选,规定时间戳,默认是当前时间和日期
<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");
?>
获得时区
<?php
date_default_timezone_set("Asia/Shanghai");
echo "当前时间是 " . date("h:i:sa");
?>
date_default_timezone_set("Asia/Shanghai");
echo "当前时间是 " . date("h:i:sa");
?>
php有构造函数和析构函数
构造函数是在对象创建时候自行调用,析构函数是在对象被销毁时自行调用
function _ _construct(){
}
function _ _destruct(){
}
$car = new Car(); //实例化时会调用构造函数
unset($car); //销毁时会调用析构函数
双下划线
静态关键字
静态属性与方法可以在不实例化类的情况下调用,直接使用
类名::方法名
的方式进行调用。静态属性
不允许
对象使用->操作符调用
class Car {
return self::$speed;
}
}
private static $speed = 10;
public static function getSpeed() {
return self::$speed;
}
}
echo Car::getSpeed(); //调用静态方法
trim去除一个字符串两端空格
rtrim去除一个字符串右部空格,r是right的缩写
ltrum去除一个字符串左部空格,l是left的缩写
获取字符串中中文长度: mb_strlen($str,"uft-8");
英文字符截取函数 substr(字符串变量,开始截取的位置,截取个数)
中文字符串截取函数 mb_substr(字符串变量,开始截取的位置,截取个数,网页编码...常用utf-8)
查找字符串函数 strpos(要处理的字符串,要定位的字符串,定位的起始位置[可选])
替换字符串函数 str_replace(要查找的字符串,要替换的字符串,被搜索的字符串,替换进行计数[可选])
格式化字符串 sprintf(格式,要转化的字符串)
字符串合并函数 implode(分隔符[可选],数组) 返回字符串
字符串分割函数 explode(分隔符[可选],数组) 返回数组
字符串转义 addslashes();
正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式
$p= '/apple/';
$str= 'apple banna'
if(preg_match($p,$str))
字符串'/apple/'就是一个正则表达式,他用来匹配源字符串中是否存在apple字符串
数据库操作
当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access等,这些数据库PHP都能够安装扩展来支持
一般情况下常说的LAMP架构指的是:Linux、Apache、Mysql、PHP,因此Mysql数据库在PHP中的应用非常广泛
if(function_exists('mysql_connect'))
数据库扩展
像Mysql常用的扩展有原生的mysql库,也可以使用增强版的mysqli扩展,还可以使用PDO进行连接与操作
mysql扩展进行数据库连接的方法
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
mysqli扩展
$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');
PDO扩展
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
设置当前连接使用的字符编码 mysql_query("set names 'utf8'");
MySQL查询
在数据库建立连接以后就可以进行查询,采用mysql_query加sql语句的形式向数据库发送查询指令
$res = mysql_query('select * from user limit 1');
对于查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据
$row = mysql_fetch_array($res);
var_dump($row);
var_dump($row);
当存在多个数据库连接时,可通过参数指令从那个连接中进行查询
$link1 = mysql_connect('127.0.0.1', 'code1', '');
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //开启一个新的连接
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //开启一个新的连接
$res = mysql_query('select * from user limit 1', $link1); //从第一个连接中查询数据
MySQL插入数据
$sql = "insert into user(name, age, class) values('李四', 18, '高三一班')";
mysql_query($sql); //执行插入语句
若数据是存储在变量中
$name = '李四';
$age = 18;
$class = '高三一班';
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
$age = 18;
$class = '高三一班';
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
mysql_query($sql); //执行插入语句
执行插入语句后,可以得到自增的主键id,通过PHP的mysql_insert_id函数可以获取该id
$uid = mysql_insert_id();
这个id作用很大,可用来判断是否插入成功,或作为关联ID进行其他的数据操作
国产、开源、面向对象、MVC框架
简单易用的MVC模式、查询语言丰富、详尽的文档和中文注释
获取框架:http://www.thinkphp.cn
单一入口框架:在一个网站中,所有请求都是指向一个脚本文件
好处:项目结构规范,控制灵活,更加安全
典型代表: zend、CodeIgniter、cakephp等