PHP学习笔记

1.0.0 简介

PHP(Hypertext Preprocessor)是一种开源的服务器端脚本语言,主要用于开发动态网站和Web应用程序,PHP可以直接嵌入到HTML文件中,方便开发。同时PHP文件中也可以包含HTML,javaScript和本身PHP代码

1.1.0 基本知识

1.1.1 语法

(1)基本格式

PHP语言基本格式为

<?php .... ?>

中间写入PHP代码

(2)注释

单行注释

<?php echo"123" ?>  //这是一个单行注释

多行注释

<?php echo"123" ?>
/* 
这是
一个多行
注释 
*/

1.1.2 变量

在PHP中,变量的命名方法为 $a=... ,规则为

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

PHP是弱类型语言,不必声明每个变量的类型

(1)PHP 变量作用域

在PHP中,有以下几种变量作用域

  • local
  • global
  • static
  • parameter

在PHP中,变量的作用域决定了变量在程序中的可访问范围。

1.Local(局部变量)

定义:局部变量是在函数内部定义的变量,仅在该函数内部有效。

特点

局部变量在函数调用时被创建,在函数执行结束时被销毁。

局部变量不能在函数外部访问。

每次调用函数时,局部变量都会重新初始化。和Python中的函数内变量相同

示例:

  function myFunction() {
      $localVar = 10; // 局部变量
      echo $localVar; // 输出 10
  }

  myFunction();
  // echo $localVar; // 错误:$localVar 在函数外部不可访问

2.Global(全局变量)

定义:全局变量是在函数外部定义的变量,可以在整个脚本中访问,包括函数内部(需要通过global关键字声明)。

特点

全局变量在脚本开始时被创建,在脚本结束时被销毁。

在函数内部访问全局变量时,需要使用global关键字。这点和Python也相同

全局变量的生命周期贯穿整个脚本运行过程。

示例:

  $globalVar = 20; // 全局变量

  function myFunction() {
      global $globalVar; // 声明使用全局变量
      echo $globalVar; // 输出 20
  }

  myFunction();
  echo $globalVar; // 输出 20

3.Static(静态变量)

定义:静态变量是在函数内部定义的,但它的值在函数调用之间不会被销毁,而是保持其值。

特点

静态变量仅在函数内部可见。

静态变量在第一次调用函数时被初始化,后续调用函数时,其值不会重新初始化。

静态变量通常用于实现计数器或保持某些状态。

示例:

  function myFunction() {
      static $staticVar = 0; // 静态变量
      $staticVar++;
      echo $staticVar; // 每次调用输出递增的值
  }

  myFunction(); // 输出 1
  myFunction(); // 输出 2
  myFunction(); // 输出 3

4.Parameter(参数变量)

定义:参数变量是函数的输入参数,用于在函数调用时传递值。

特点

参数变量的作用域是函数内部。

参数变量的值在函数调用时由调用者提供,函数执行结束后,参数变量被销毁。

参数变量可以是值传递(默认),也可以是引用传递(通过&符号)。

示例:

  function myFunction($param) { // 参数变量
      echo $param; // 输出参数值
  }

  myFunction(30); // 输出 30
  // echo $param; // 错误:$param 在函数外部不可访问

总结

  • Local:仅在函数内部有效,每次调用函数时重新初始化。
  • Global:在脚本全局范围内有效,需在函数内部用global声明。
  • Static:在函数内部有效,但值在函数调用之间保持不变。
  • Parameter:在函数内部有效,由调用者提供值,函数执行结束后销毁。

(2)$_GET与$_POST变量

$_GET与$_POST变量分别用于接受页面中以GET和POST方式提交的值,也就是 method 的值,GET以?变量名= 的形式在URL后,POST传递的参数不直接可见,用法

$_GET(POST)["变量名"]

(3)超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

(4)魔术常量

魔术常量是PHP自带的变量,会随其在代码中的位置二改变其值

__LINE__

文件中的当前行号。

<?php echo '这是第 " ' . __LINE__ . ' " 行'; ?>

输出:这是第 “2” 行

__FILE__

当前文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。在PHP 4.0.2后,该变量返回的是绝对路径,但是之前版本可能是返回相对路径

<?php
echo '该文件位于 " '  . __FILE__ . ' " ';
?>

输出:该文件位于 “C:\test\index.php”

__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

<?php
echo '该文件位于 " '  . __DIR__ . ' " ';
?>

输出:该文件位于 “ C:\test ”

__FUNCTION__

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的

<?php
function test() {
    echo  '函数名为:' . __FUNCTION__ ;
}
test();
?>

输出:函数名为:test

__CLASS__

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

<?php
class test {
    function _print() {
        echo '类名为:'  . __CLASS__ . "<br>";
    }
}
$t = new test();
$t->_print();
?>

输出:类名为:test

在PHP中,Trait是一种代码复用的机制,用于在类中引入一些方法,而不需要通过继承来实现。它类似于其他语言中的“mixin”(混入)功能。Trait可以包含方法和属性,但不能实例化,只能被类使用。

Trait的定义语法类似于类,但使用trait关键字。

trait MyTrait {
    public function myMethod() {
        echo "This is a method from MyTrait.";
    }
}

使用use关键字将Trait引入到类中。

class MyClass {
    use MyTrait; // 引入Trait
}

$obj = new MyClass();
$obj->myMethod(); // 输出:This is a method from MyTrait.

__METHOD__

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

<?php
function test() {
    echo  '函数名为:' . __METHOD__ ;
}
test();
?>

输出:函数名为:test

__NAMESPACE__

为了在一个大型项目中使用同名变量时不会冲突,所以使用命名空间,不同空间之间可以存在同名变量,改常量返回当前命名空间的名称(区分大小写),此常量是在编译时定义的(PHP 5.3.0 新增)

<?php
namespace MyProject;
 
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
?>

输出:命名空间为:”MyProject”

1.1.3 常用函数

(1)echo/print 函数

  • echo:可以一次性输出多个变量,并用逗号隔开,记得结尾分号
echo "这是一个", "字符串,", "使用了", "多个", "参数。";
  • print:一次只能输出一个变量
print "我要学习 PHP!";

(2)if…else

PHP中的判断语句和Python基本相同,只是写法稍有不同,不需要冒号和缩进,采用大括号包裹执行内容

if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
} 

(3)Switch语句

switch可以根据条件选择性的执行一个分支(Python没有)

<?php
switch (expression) {
    case value1:
        // 代码块1
        break;
    case value2:
        // 代码块2
        break;
    // 更多的 case 语句
    default:
        // 如果没有匹配的值
}
?>

在括号中写入判断式,这个式子生成一个值来匹配下方的value值,一旦匹配就执行那个分支。若没有匹配值,执行default分支。

(4)While 循环

普通while循环
while (条件)
{
    要执行的代码;
}

当括号内条件为真,则会执行大括号中代码,和Pytohn相同

do…while 语句
do
{
    要执行的代码;
}
while (条件);

do…while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。举个实际例子就容易明白

int num;
do {
    printf("请输入一个正数:");
    scanf("%d", &num);
    if (num <= 0) {
        printf("输入无效,请重新输入!\n");
    }
} while (num <= 0);

这里是一个判断用户输入是否为正数的代码,虽然里面有判断,但是不管怎样,要先把提示信息给出来。这种多用于菜单类的

1.2.0 实际操作

一个简单的留言板网页,文件结构

PHP
├─ .htaccess
├─ index.html
├─ post.php
├─ passages
└─ list.php

post.php负责接受由网页传来的留言数据,并将其按照顺序放在passages文件夹中,每个留言一个文档。

<?php
$content = $_POST['content'];
$content = htmlspecialchars($content, ENT_QUOTES, 'UTF-8');
$directory = 'passages/';
$files = scandir($directory);
$files = count($files) - 2;
$new_files = $directory.($files+1) . '.txt';
$file = fopen($new_files,'a');
fwrite($file, $content);
fclose($file);
?>

list.php负责读取passage文件夹中的文档并将其显示在index.html中

<?php
$directory = 'passages/';
$files = glob($directory . '*.txt');
$count = count($files);
for ($i = 1; $i <= $count; $i++) {
    $content = file_get_contents('passages/'.$i.'.txt');
    echo $content.'<br>';
}
?>

index.html中使用Javascript的Ajax请求提交数据和查询数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>留言板</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function() {
            $('#submitForm').on('submit', function(event) {
                event.preventDefault(); // 阻止表单默认提交行为
                var formData = $(this).serialize(); // 获取表单数据
                $.ajax({
                    type: 'POST',
                    url: 'post.php', // 确保这个文件存在并正确处理POST请求
                    data: formData,
                    success: function(response) {
                        $('#status').html('<p>提交成功。'); 
                    },
                    error: function() {
                        $('#status').html('<p>提交失败。</p>');
                    }
                });
            });
        });
    </script>
</head>
<body>
    <div>
        <h1>这是测试留言板</h1>
        <p>在下方留言</p>
    </div>
    
    <div>
        <form id="submitForm" action="post.php" method="post">
            <label for="name">请输入你的留言</label>
            <textarea id="content" name="content" rows="4" cols="50" required></textarea><br><br>
            <button type="submit">提交</button>
        </form>
    </div>
    <div>
        <div id="status">
            
        </div>
    </div>
    <script>
        $(document).ready(function() {
            $('#submitForm').on('submit', function(event) {
                event.preventDefault(); // 阻止表单默认提交行为
                var formData = $(this).serialize(); // 获取表单数据
                $.ajax({
                    type: 'POST',
                    url: 'list.php', // 确保这个文件存在并正确处理POST请求
                    data: formData,
                    success: function(response) {
                        $('#result').html(response); // 将结果显示在<div>中
                    },
                    error: function() {
                        $('#result').html('<p>提交失败。</p>');
                    }
                });
            });
        });
    </script>
    <div>
        <h2>留言列表</h2>
        <div id="result">
        </div>
    </div>
</body>
</html>

虽然不懂Ajax的原理,但是会用😁,最终效果

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇