开发环境
- WAMP开发环境:运行PHP WEB应用程序的软件环境,包括Windows客户端的web浏览器,以及服务端的apache、php和mysql数据库等。
- LAMP开发环境:Linux、Apache、MYSQL、php
HTML表格、表单
基础语法
- 语言标记:php是一种嵌入式脚本语言,XML风格和简短风格
- 标识符
- 以大写字母、小写字母或下划线_开头
- 由大写字母、小写字母、下划线_或数字组成
- 变量标识符区分大小写
- 用户自定义的类和函数、内置的结构以及关键字(echo、while、class)等不区分大小写
- 不能使用php保留字或者内置函数名
- 数据类型(标量数据类型、复合数据类型、特殊数据类型)
-
标量数据类型:整型、浮点型、布尔型、字符串
-
复合数据类型:数组、对象
-
特殊数据类型:资源类型、NULL类型、回调类型
- 变量的定义、赋值
- 可变变量:$$a = “pwd”
- 引用赋值:$x1 = 3.14; $x2 = & $x1;
流程控制
- 顺序结构
赋值语句、输入输出语句等 - 选择结构
switch语句 - 循环结构
foreach循环
//(1)索引数组
foreach($arr as $value) {
语句;
}
//(2)关联数组
foreach($arr as $key => $value) {
语句;
}
函数
- 函数的调用
//递归调用,出编程题
<?php
function myprint1(string $param1, int $param2):void {
echo 'this is print1';
echo $param1, $param2;
return ;
}
function myprint2($param1,$param2):void {
echo 'this is print2';
echo $param1, $param2, '<br>';
myprint1($param1,$param2);
return ;
}
function myprint3($param1,$param2,...$param):void {
echo $param1,$param2,'<br>';
print_r($param);
echo '<br>';
myprint2($param1,$param2);
return ;
}
myprint3('a=',100,20,30);
?>
- 函数的参数传递
在函数未被调用时,函数的形参并不占有实际的内存空间,也没有实际的值。只有在函数被调用时才为形参分配存储单元,并将实参与形参结合。
函数的参数传递:就是指形参与实参结合的过程。
PHP支持函数参数的传递方式有3种,即值传递、引用传递和默认参数。
-
值传递
值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参,即直接将实参的值传递给形参。 -
引用传递
引用是一种特殊的变量,可以被认为是另一个变量的名字。
用引用作为形参,在函数调用时发生的参数传递,称为引用传递。
函数的调用采用引用的参数传递方式,函数调用时传递的是实参的引用,是双向传递过程。
-
默认参数
PHP中的函数在定义时,还可以为一个或多个形参指定默认值。
默认值必须是常量表达式,也可以是NULL,并且当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧。
- 内置函数
- getdate()函数获取当前时间
- date()函数实现时间的格式化
- bool checkdate(int month, int day, int year)对日期进行有效性检测
- int time(void)该函数返回一个整型的时间戳
- int mktime(int h, int m, int s, int m, int d, int y)取得该日期的unix时间戳
$today = time();//当前时间戳
$birthday = mktime(0,0,0,10,1,2000);//生日转换成时间戳
$agestamp = $today - $birthday;//时间差
$age = floor($agestamp/(365*24*60*60));//计算年龄
字符串
- 字符串的输出
echo、printf()、print_r()、var_dump
echo '中国梦,我的梦!';
echo ('中国梦,我的梦!');
echo '中国梦' , ',' , '我的梦!';
- 字符串的指定方法
- 单引号:不会解析变量,只能用\'和\\两种转义字符
- 双引号:会解析变量
- 字符串常用操作
- strlen()获取字符串长度
- trim()去除首尾空格及特殊字符
- explode()函数将字符串以某种分隔符进行分解,形成多个子字符串,并将这些子串存储于一个数组中。
- implode()提供与explode()相反的功能,把数组中几个小的字符串拼接成一个大的字符串。
- substr()如果要截取字符串的子串,可以用substr()函数来实现。
- 正则表达式
- 邮箱匹配
"/^\w+@\w+(\.\w+){0,3}$/"
- 正负数匹配
"/^(\-|\+)?\d+(\.\d+)?$/"
数组
- 数组分类
- 索引数组:数字作为下标
- 关联数组:字符串作为索引值
- 数组的遍历
- 预定义数组
页面通信
- 重定向方式
- js脚本
- header()函数
- Cookie技术
- 创建cookie:bool setcookie(string name, string value, int expire)
- 使用cookie:$vists = $_COOKIE[‘visits’];
- 删除cookie
(1)setcookie(“visits”);
(2)setcookie(“visits”, ‘’, time()-1);
- session技术
- session的注册和使用:
session_start();//启动session
$_SESSION['cart'] = array(array('id'=>1,'name'=>'PHP Web'));//注册一个名为cart的变量并赋值
$item = $_SESSION['cart'][0];//从cart变量数组中取出第一个元素给item
- session的销毁和变量的注销
(1)销毁:bool session_destory();
(2)注销:unset($_SESSION[‘cart’]);
文件包含
- include
include ‘完整路径文件名’
include(‘完整路径文件名’) - require
在包含文件时,如果没有找到被包含的文件,include语句会发出警告信息,程序继续运行;而require语句则会发出致命错误,程序停止运行。 - 命名空间
面向对象
- 类的成员方法的定义
- 构造方法的声明和使用
function __construct($name, $sex, $age) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
-
继承
-
接口
数据库
- 数据库连接文件
<?php
$dsn = "mysql:dbname = test;host = localhost";
$user = 'root';
$pwd = 'root';
try {
$pdo = new PDO($dsn, $user, $pwd);
} catch(PDOException $e) {
echo '数据库连接失败:' . $e.getMessage();
exit();
}
?>
- 使用PDO类的query()方法
<?php
require_once 'phpmysqlconnector.php';
$query = "select * from student";
try {
$result = $pdo->query($query);
foreach($result as $row) {
echo $row['student_no'];
echo $row['student_name'];
echo $row['student_tel'];
}
} catch (PDOException $e) {
echo $e->getMessage();
}
echo '数据库中共有'.$result->rowCount().'条学生信息!';
?>
- 使用fetch() / fetchAll()获取数据
<?php
require_once 'phpmysqlconnector.php';
$query = "select * from student";
$stmt = $pdo->query($query);
$row = $stmt->fetch(PDO::FETCH_NUM);
while($row) {
list($sno, $sname, $stel) = $row;
echo $sno;
echo $sname;
echo $stel;
$row = $stmt->fetch(PDO::FETCH_NUM);
}
?>
<?php
require_once 'phpmysqlconnector.php';
$query = "select * from student";
$stmt = $pdo->query($query);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '<table>'.'<tr>'.'<td>学号</td>'.'<td>姓名</td>'.'<td>电话</td>'.'</tr>';
foreach($rows as $row) {
echo '<tr>';
echo '<td>'.$row['student_no'].'</td>';
echo '<td>'.$row['student_name'].'</td>';
echo '<td>'.$row['student_tel'].'</td>';
echo '</tr>';
}
echo '</table>'
?>
文件
- 判断是否是文件
bool is_file(string $filename) - 检验文件或目录是否真的存在
bool file_exists(string $filename) - 读取整个文件的内容(不需要打开/关闭文件)
- readfile()
- file()
- file_get_contents()
- 上传文件表单
上述代码中,表单的method属性必须为post;enctype属性必须为multipart/form-data,这个值表示要上传二进制数据;表单元素input的type属性必须为file,这样服务器才会将文本框中的数据作为上传文件来处理。
- 写入文件
- fwrite()
- file_put_contents()
- 移动与重命名
rename()
图像
- 创建图像
resource imagecreate(int x, int y) - 颜色
int imagecolorallocate(resource $image, int red, int green, int blue) - 信息查询
array getimagesize() - 图像缩放
bool imagecopyresized()
bool imagecopyresampled() - 图像旋转
resource imagerotate()