一、 PHP简介
认识PHP
PHP Hypertext Preprecessor 超文本预处理器 可以嵌入到html代码中的
PHP通用开源动态脚本语言,运行在服务端,适合高效快捷的进行web开发
通常用于创建动态生成的网页,支持常用的数据库 MySql, mariaDB ,Oracle, MongoDB
php发展史
PHP Personal Home Page 1994 Perl Rasmus Lerdorf 来统计个人网站访问量的程序,C重写后,1995 php1 php2 加入了对mysql
php5 2004-7 引入了面向对象编程 5.4 trait 5.6
php7 2015-12 性能是 php5.6提高了2倍
php7.4 提供了pre-loading预加载机制,实现了部分程序的常驻内存
4 2020-11 PHP8.0问世 高效的JIT just-in-time(即使编译)运算支持,PHP 已经应用到 websocket服务,高性能web,物联网,即时通讯,游戏,微服务等非web领域的系统开发
PHP 工作运行原理
二、 PHP语法第一课
PHP include request区别
(1)、include 遇到错误还继续,非常适合模版
(2)、request遇到错误就停止
PHP 函数不区分大小写、php变量大小敏感
索引数组
关联数组
二维数组遍历
for
foreach
list()数组找那个的值赋给一组变量
extract
php 变量
1. 数据类型转换
转换方式 | 函数 |
---|---|
临时转换 | (int),(string),(array),(object)… |
自动转换 | 根据操作符对操作数的类型要求进行 |
强制转换 | settype() |
PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:
(int)、(integer):转换成整形
(float)、(double)、(real):转换成浮点型
(string):转换成字符串
(bool)、(boolean):转换成布尔类型
(array):转换成数组
(object):转换成对象
第一种转换方式: (int) (bool) (float) (string) (array) (object)
$num1=3.14;
$num2=(int)$num1;
var_dump($num1); //输出float(3.14)
var_dump($num2); //输出int(3)
?>
第二种转换方式: intval() floatval() strval()
$str=”123.9abc”;
$int=intval($str); //转换后数值:123
$float=floatval($str); //转换后数值:123.9
$str=strval($float); //转换后字符串:”123.9”
?>
第三种转换方式: settype();
$num4=12.8;
$flg=settype($num4,”int”);
var_dump($flg); //输出bool(true)
var_dump($num4); //输出int(12)
?>
2. 类型检测
转换方式 | 函数 |
---|---|
标量 | is_int(),is_string(),is_bool()… |
复合 | is_array(),is_object() |
特殊 | is_null(),is_resource() |
PHP有很多资源类型:数据库连接、结果、图像、PDF等
is_resource():判断一个变量是否是一个资源类型
null讲解
@var_dump 有错误可以忽略不在页面显示
null 类型不等于下面任何:
false(布尔值) 0(数字类型) ‘’(字符串)
如何能获得null 三种方法
1、直接赋值$var =nul
2、unset($fp)
3、var_dump($emp) $emp 不存在
3. 变量命名
- 仅允许使用: 英文字母(a-z,A-Z),数字(0-9),下划线(_)或他们的组合
- 不允许使用数字开头
- 必须使用”$”美元符为前缀
- 严格区分大小写
- 驼峰命名法
4. 常量
- define(): 函数
- const: 关键字
- 固定的值(圆周率), 常量不能重新被定义 或者取消定义
- 常量的命名前不能加 $
- 常量推荐全部大写,多个单词之间用下划线连接_
- 变量不属于全局成员, 常量、类、接口、函数属于全局成员 不受作用域限制
- 5、类常量只能用const定义
常量类型
系统常量 魔术常量 DIR
const APP_PATH = '/phpEnv/www/chloe.io/0302';
echo APP_PATH;
define('NATION', '中国');
echo NATION;
printf('国籍:%s', NATION);
class User
{
//类常量只能用const定义
const APP_PATH = '/phpEnv/www/chloe.io/0302';
}
// 常量必须初始化赋值
$height;
const HEIGHT = '183cm';
ob_clean();
// 系统常量
// print_r(get_defined_constants(true));
// 魔术常量
echo __FILE__; //当前执行PHP脚本的完整路径和文件名, 绝对路径
echo dirname(__FILE__); //当前执行PHP脚本的完整路径
echo __DIR__;//当前执行PHP脚本的完整路径
5. 全局变量 无法在函数内部直接调用
//系统预定义变量
// 超全局变量: 数组,任何地方都可以访问,不受作用域限制
// $GLOBALS: 引用全局作用域中可用的全部变量
// $_SERVER: 服务器和执行环境信息
// $_GET :通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
// $_POST:当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本
// $_FILES:通过 HTTP POST 方式上传到当前脚本的项目的数组
// $_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组
// $_SESSION:当前脚本可用 SESSION 变量的数组
// $_REQUEST: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
// $_ENV: 通过环境方式传递给当前脚本的变量的数组
流程控制
1. 单一条件分支结构
if (1 == 1) {
echo 111;
}
2.双向条件分支结构 if…else
if(条件表达式)
{
#满足条件执行的代码块
} else{
不满足条件执行的代码块
}
3. 多向条件分支结构
$age = 85;
$gender = '女';
if ($gender == '女' && $age < 55) :
echo "您好女士,距离您退休还有" . (55 - $age) . "年<br>";
elseif ($gender == '女' && $age > 55) :
echo "您好女士,您已经退休" . ($age - 55) . "年了<br>";
elseif ($gender == '男' && $age < 60) :
echo "先生您好,距离您退休还有" . (60 - $age) . "年<br>";
elseif ($gender == '男' && $age > 60) :
echo "先生您好 ,您已经退休" . ($age - 60) . "年了<br>";
else :
echo '很抱歉,您输入的信息不正确';
endif;
ob_clean();
$d = date("w"); //0-6
switch ($d):
case 1:
echo '今天是工作日星期一';
break;
case 2:
echo '今天是工作日星期二';
break;
case 3:
echo '今天是工作日星期三';
break;
case 4:
echo '今天是工作日星期四';
break;
case 5:
echo '今天是工作日星期五';
break;
default:
echo "今天休息!";
endswitch;
// break 退出当前循环 continue 跳过此次循环,进入下一轮循环
php 模版
$nav = '';
for ($i = 0; $i < count($navs); $i++) {
$nav .= "<a href='{$navs[$i]['url']}' style='padding: 0 15px' >{$navs[$i]['name']}</a>";
}
js 模版
// 商品信息模板
const tr = `
<tr>
<td><input type="checkbox" name="" class="check" checked /></td>
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.unit}</td>
<td class="price">${item.price}</td>
<td><input type="number" name="" value="${item.num}" min="1"></td>
<td class="money">${item.money}</td>
</tr>
`
三、 PHP项目实例
目录结构
(1)data存储是数组
(2)template\public存储是网页头、网页底公共模版,都是用include 引用
(3)static存储js css等
template\public 头部底部模板如下
头部模板
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<?
$arr = require 'data/data.php';
$navs = require 'data/nav.php';
?>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="keywords" content="<?= $arr['keywords'] ?>" />
<meta name="description" content="<?= $arr['des'] ?>" />
<link rel="stylesheet" href="static/css/style.css" />
<title><?= $arr['title'] ?></title>
</head>
<body>
<!-- 页眉 -->
<!-- 修改php.ini open_short_tag On-->
<header>
<nav>
<a href="index.php">首页</a>
<? foreach ($navs as $k => $v) : ?>
<a href="news.php"><?= $v['name'] ?></a>
<? endforeach; ?>
</nav>
</header>
<!-- 页脚 -->
<footer>
<div>php中文网©版权所有(2022-2025)</div>
</footer>
</body>
</html>
data存储是数组
return [
["id" => 1, 'name' => '新闻'],
["id" => 2, 'name' => '产品'],
["id" => 3, 'name' => '联系'],
["id" => 4, 'name' => '登录'],
];
return array("keywords" => "新闻,产品,合肥", "des" => "专业生产中高档办公家具,行业畅销20年", "title" => "首頁");
首页如下
<!-- 引入页眉 -->
<?php include 'template/public/header.php' ?>
<!-- 主体 -->
<main>
<!-- 新闻列表 -->
<div class="news">
<h3>新闻列表</h3>
<div class="list">
<a href="">切实做好高风险岗位从业人员疫情防控。</a>
<a href="">切实做好高风险岗位从业人员疫情防控。</a>
<a href="">切实做好高风险岗位从业人员疫情防控。</a>
<a href="">切实做好高风险岗位从业人员疫情防控。</a>
<a href="">切实做好高风险岗位从业人员疫情防控。</a>
</div>
</div>
<!-- 产品列表 -->
<div class="items">
<h3>产品列表</h3>
<div class="list">
<div class="item">
<img src="static/images/item1.jpeg" alt="" />
<a href="">最新产品1</a>
</div>
<div class="item">
<img src="static/images/item2.jpeg" alt="" />
<a href="">最新产品2</a>
</div>
<div class="item">
<a href=""><img src="static/images/item3.jpeg" alt="" /></a>
<a href="">最新产品3</a>
</div>
<div class="item">
<img src="static/images/item4.jpeg" alt="" />
<a href="">最新产品4</a>
</div>
</div>
</div>
</main>
<!-- 引入页脚 -->
<?php include 'template/public/footer.php' ?>