php是什么?
PHP是PHP:HypertextPreprocessor(超文本预处理器)的首字母缩写,是一种跨平台的、开源的、免费的脚本语言,其语法吸收了C语言、Java 和 Perl 的特点,利于学习,使用广泛,特别适合于Web网站开发,它可以嵌入HTML中。
PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码必须在服务器上执行,而结果以纯文本返回浏览器,文件的后缀是”.php”
php环境搭建
系统 | 集成工具 | 编辑器 |
---|---|---|
windows | phpStudy/phpEnv/upupw | vscode/sublime/netbeans |
macos | mamp / xampp | vscode/sublime/netbeans |
Phpstudy 搭建服务器教程
对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事;对老手来说也是一件烦琐的事。因此无论你是新手还是老手,Phpstudy都是一个不错的选择。
phpstudy已经为PHP开发者提供了十年的开发环境服务,是国内最早,用户量最大的集成环境软件,对于软件调试,开发环境的沙盒测试提供非常便捷的服务。
PHPStudy(小皮)下载安装步骤:
第一步:从官网下载PHPStudy(小皮)V8.1版安装包
下载地址:https://www.xp.cn/download.html
第二步:解压并双击phpstudy V8.0安装包,出现如下安装界面
第三步:然后打开自定义选项,选择安装路径。默认是安装在D盘
注意:安装包的设置默认是系统盘之外的第二个盘,没有其他盘符的时候则安装在C盘,当主机盘符只有C盘可用的时候,安装时不要使用U盘,否则可能误装到U盘当中。
安装说明(特别注意)
- 安装路径不能包含“中文”或者“空格”,否则启动会报错(例如错误提示:Can’t change dir to ‘G:\x65b0\x5efa\x6587\)
- 保证安装路径是纯净的,安装路径下不能有已安装的V8版本,若重新安装,请选择其它路径
第四步:安装成功后就会出现以下界面
我们可以在此界面,启动或停止Apache、MySQL等服务。
第五步:选择设置项-系统设置,然后设置网站根目录
第六步:选择设置好根目录后,点击应用,然后重启Apache即可
第七步:选择创建网站,进行基本的域名和目录配置
第八步:在创建的网站目录下新建demo.php内容为phpinfo(),浏览器通过域名进行访问
<?php
phpinfo();
?>
php 代码书写
PHP 定界符
// xml风格
<?php
phpinfo();
?>
// 短标签
<? echo "php学习" ?> // 如果只有一行语句或者是最后一行语句,分号可以省略
<?="php学习"?> // 短标签输出可以省略echo
注意:纯PHP文档,禁止写结束标签,只需要开头标签<?php 即可,无需结束标签。
PHP书写位置
将PHP嵌入到HTML中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>将PHP嵌入到HTML中<?= "任意地方" ?></title>
</head>
<body>
<?php
/**
* 1. php 代码就像css,js一样可以使用标签方式直接嵌入到HTML文档中
* 2. php 代码使用的标签是: <?php …… ?>
* 3. web 服务器只会将PHP标签内部的代码发送给PHP引擎处理
* 4. html 文档中嵌入的PHP代码段的“数量”和“位置”不受限制
* 5. html 文档中存在PHP代码段时,扩展名必须是.php才可以
*/
?>
<h2>初学PHP语法规则</h2>
<h2>初学PHP语法规则</h2>
<p>how you doing?<?php echo $username;?></p>
<!-- php短标签 -->
<h1>你在干嘛<?= $username?></h1>
</body>
</html>
PHP 代码注释
<?php
// 单行注释
# 单行注释 linux
/**
* 多行注释
* 多行注释
*/
?>
PHP 指令分隔符
php语句中结构定义语句 函数 类 接口 条件分支结构(if else)等不需要指令分隔符来结束;
功能执行语句、变量的声明、函数的调用、内容的输出后面需要添加指令分隔符;
还有一点,当只有一行PHP语句时,或者后面没有PHP语句了,这时可以省略最后的分隔符;
<?php
//结构定义语句
function add (int $a,int $b)
{
//功能执行语句
return $a+$b;
}
//功能执行语句
echo add(100,200);
//结构定义语句
class User {
}
//结构定义语句
interface USB{
}
?>
分别体验PHP和JavaScript中遍历打印数组
// JavaScript中定义数组
const cars = ["宝马3GT Xdrive 330li M闪耀灰","宝马X5 xdrive30i X","宝马750LI xdrive V8 M"];
// js for 遍历数组
for(var i=0;i<cars.length;i++){
console.log(i+"---"+cars[i]);
}
// js forEach
cars.forEach((car,index)=>console.log(index+"---"+car));
// php中定义数组
$cars = ["宝马3GT Xdrive 330li M闪耀灰","宝马X5 xdrive30i X","宝马750LI xdrive V8 M"];
// php for 遍历数组
for($i=0;$i<count($cars);$i++){
echo $i."---".$cars[$i]."</br>";
}
// php foreach遍历数组
foreach ($cars as $key => $value) {
echo $key."---".$value."</br>";
}
php 中遍历创建html元素
<h2><?ECHO '宝马BMW好车'?></h2>
<ol>
<li><a href=""><?echo '宝马3GT Xdrive 330li M闪耀灰'?></a></li>
<li><a href=""><?echo '宝马x5 xdrive30i X'?></a></li>
<li><a href=""><?echo '宝马750LI xdrive V8 M'?></a></li>
</ol>
<!-- 下面使用数组遍历来创建列表 -->
<? $cars = ["宝马3GT Xdrive 330li M闪耀灰","宝马X5 xdrive30i X","宝马750LI xdrive V8 M"]; ?>
<h2><? echo '宝马BMW好车'?></h2>
<ol>
<?php foreach($cars as $k =>$car){
echo '<li><a href="">'.$car.'</a></li>';
}
?>
</ol>
<!-- php模板语法 代替{} echo -->
<h2><? echo '宝马BMW好车'?></h2>
<ol>
<? foreach($cars as $car) :?>
<li><a href=""><?=$car?></a></li>
<?endforeach?>
</ol>
php 中引入外部文件
php引入文件的四种方法
1.include
包含并运行指定文件。被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path指定的目录寻找。如果在 include_path下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。
2.include_once
在脚本执行期间包含并运行指定文件,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。
3.require
require 和 include几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include只产生警告(E_WARNING),脚本会继续运行。
4.require_once
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
总结:
两者的不同:include引入如果该文件路径不正确或文件不存在出错时,还会继续执行下面的代码。require则不会继续执行程序。
include_once和include的区别:多个include引入同一文件,会加载多个文件,include_once只加载一次。可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。
include 在加载文件失败时,会生成一个警告(E_WARNING),在错误发生后脚本仍继续执行,所以include 用在希望继续执行并向用户输出结果时。
<?php
# 引入一个不存在的脚本(xxx.php)
include('./xxx.php');
# 上面发生警告后下面的代码仍然继续执行
echo 'hello!';
# 引入一个不存在的脚本(xxx.php)
require('./xxx.php');
# 上面发生致命错误后下面的代码不会执行
echo 'hello!';//得不到执行
?>
在开发中,我们网站头部导航栏和页脚底部还有一些数据列表往往都是一样的。来回复制粘贴显得不够整洁。这时我们可以将他们分离出去,成为公共的组件,从而通过引入外部文件的方式来完成。php引入外部文件,最常见的是引入公共头部或底部。
先看一些页面效果,我们将导航栏和页脚部分都分离为公共的模块。需要时在页面相应位置引入的方式。
来看一些目录结构
index.php
<!-- 1.公共头部 -->
<? require 'common/header.php'?>
<!-- 2.主体部分 -->
<h2><?=$navs[0]?></h2>
<ol>
<!-- php模板语法 代替{} echo -->
<? foreach($news as $new) :?>
<li><a href=""><?=$new?></a></li>
<?endforeach?>
</ol>
<!-- 3. 公共页脚 -->
<? require 'common/footer.php'?>
common/header.php
<? require 'config.php' ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=$title?></title>
<meta name="keywords" content="<?=$keywords?>">
<meta name="description" content="<?=$desc?>">
<link rel="stylesheet" href="static/style.css">
</head>
<!-- 导航 -->
<div class="tab">
<div class="tab-srcoll">
<div class="tab-srcoll-box" >
<div class="tab-srcoll-item">首页</div>
<? foreach ($navs as $nav) : ?>
<div class="tab-srcoll-item"> <?=$nav?></div>
<? endforeach ?>
</div>
</div>
</div>
common/footer.php
<!-- footer -->
<div class="footer">
<p class="copyright"><?=$copyright?>© 版权所有</p>
</div>
</body>
</html>
common/config.php
<?php
$title = 'osChina技术论坛';
$desc = 'osChina聚集热门技术文章,只为提高中国互联网技术';
$keywords = 'PHP8,微信小程序,uniapp';
$copyright = 'php中文网';
// 导航栏数组
$navs = ['后端开发','职场生活', '前端开发', '人工智能', '移动开发', '其它' ];
// 文章标题数组
$news = ['后期静态绑定','php8的新特性','composer版本更新'];
设置错误级别
错误的级别:
- Deprecated最低级别的错误,程序继续执行
- Notice通知级别的错误,如直接使用未声明变量,程序继续执行
- Warning警告级别的错误,可能得不到想要的结果
- Fatal error 致命级别错误,程序不往下执行
- parse error 语法解析错误,最高级别错误,连其他错误信息也不呈现出来
- EUSER相关错误 用户设置的相关错误
打开php.ini文件,找到如下修改即可
display_errors = On
error_reporting = E_ALL
; E_ALL - 所有的错误和警告
; E_ERROR - 致命性运行时错
; E_WARNING - 运行时警告(非致命性错)
; E_PARSE - 编译时解析错误
; E_NOTICE - 运行时提醒
如果使用UPUPW集成工具可以通过面板进行设置
在开发中,报错级别高一点,在上线产品中,报错级别要低:
- 开发阶段:E_ALL
- 生产阶段:E_ALL & ~E_DEPRECATED & ~E_STRICT