PHP基础知识

PHP基础知识

1、标记风格

推荐使用

这 是一种短标记风格,用于在PHP中嵌入代码块。它是一种较早期的标记风格,但在一些PHP配置中可能被禁用或不推荐使用。

2、分号、空白、换行符

在PHP中分号“ ;”用作语句的结束符号。每个语句应该以分号结尾,以表示语句的结束。

空白和换行符(包括空格、制表符和换行符)通常被解释器忽略,因此它们在大多数情况下对代码的执行没有直接影响。

提示: 通过在适当的位置使用空白和换行符,可以使代码更易于阅读和理解,并且有助于代码的组织和格式化。

3、注释

//............ 单行注释

#.............. 单行注释

/*..................*/ 多行注释

4、内容输出

  1. echo语句:echo是PHP中最常用的输出方法之一,用于将内容输出到浏览器或命令行。

    `echo "Hello Php!";`
    
  2. print语句:print是另一种常见的输出方法,与echo类似,用于将内容输出到浏览器或命令行。

    print "Hello Php!";
    
  3. print_r函数:print_r函数用于打印复杂数据类型(如数组、对象)的可读性较好的表示形式。

    $demoArr = ['apple','banana','orange];
    print_r($demoArr);
    
  4. var_dump函数:var_dump函数用于打印变量的详细信息,包括数据类型和值。

    $name = "John_lee";
    var_dump($name);
    
  5. printf函数:printf函数用于格式化输出字符串,可以根据指定的格式打印变量的值。

    $number = 42;
    printf("The answer is %d", $number);
    

    5.1 常用的占位符:

    占位符 说明
    %d 带符号的十进制数
    %u 不带符号的十进制数
    %o 不带符号的八进制数
    %x 不带符号的十六进制数(小写字母)
    %X 不带符号的十六进制数(大写字母)
    %f 浮点数(本地设置)
    %F 浮点数(不本地设置)
    %e 科学计数法(小写e)
    %E 科学计数法(大写E)
    %s 字符串
    %c ASCII码值相应的字符
    %b 二进制数
    %a 十六进制数(小写字母)
    %A 十六进制数(大写字母)
  6. sprintf函数:sprintf函数与printf函数类似,但它返回格式化后的字符串 (用变量保存),而不是直接将其打印出来。

$number = 42;
$formattedString = sprintf("The answer is %d", $number);
echo $formattedString;

5、变量与常量

5.1 变量命名规则

在PHP中,变量名必须以美元符号“ ”开头,后面跟着变量名。变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。此外, P H P 是区分大小写的,因此 ‘ ”开头,后面跟着变量名。变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。此外,PHP是区分大小写的,因此` 开头,后面跟着变量名。变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。此外,PHP是区分大小写的,因此name$Name`是两个不同的变量。

5.2 变量声明

PHP是一种动态弱类型语言,这意味着您无需显式声明变量的类型。变量的类型是根据其值自动确定的。例如:

$name = "John"; // 字符串类型
$age = 25; // 整数类型
$isStudent = true; // 布尔类型

5.3 变量赋值

要为变量赋值,只需使用赋值操作符(=)将值分配给变量。例如:

$name = "John";
$age = 25;

5.4 变量输出

要在PHP中输出变量的值,可以使用echo语句或print函数。例如:

$name = "John";
echo $name; // 输出:John

5.5 变量类型

字符串(String)

字符串是由一串字符组成的数据类型。可以使用单引号或双引号来定义字符串。例如:

$name = "John";
$message = 'Hello, World!';
整数(Integer)

整数是不带小数点的数字。例如:

$age = 25;
浮点数(Float)

浮点数是带有小数点的数字。例如:

$pi = 3.14;
布尔(Boolean)

布尔类型表示真或假的值。可以是truefalse。例如:

$isStudent = true;
数组(Array)

数组是一种用于存储多个值的数据结构。可以使用array()函数或简化的[]语法来创建数组。例如:

$fruits = array("apple", "banana", "orange");
// 或者
$fruits = ["apple", "banana", "orange"];
对象(Object)

对象是类的实例。对象具有属性和方法。例如:

class Person {
    public $name;
    public function sayHello() {
        echo "Hello, my name is " . $this->name;
    }
}

$person = new Person();
$person->name = "John";
$person->sayHello(); // 输出:Hello, my name is John
空(Null)

null表示变量没有值。例如:

$foo = null;

5.6 变量作用域

变量的作用域指的是变量在程序中有效的区域。在PHP中,有以下几种作用域:

5.6.1 局部作用域

局部作用域是指在函数或代码块内部声明的变量。这些变量只在其声明的函数或代码块内部可见。例如:

function myFunction() {
    $name = "John"; // 局部变量
    echo $name;
}

myFunction(); // 输出:John
echo $name; // 错误:变量$name在该作用域外部不可见

5.6.2全局作用域

全局作用域是指在函数外部声明的变量。这些变量在整个程序中都可见。例如:

$name = "John"; // 全局变量

function myFunction() {
    global $name; // 使用global关键声明全局变量
    echo $name;
}

myFunction(); // 输出:John
echo $name; // 输出:John

5.6.3 静态作用域

静态作用域用于在函数调用之间保持变量的持久性。静态变量在函数内部声明,但在函数调用之间保持其值。例如:

function myFunction() {
    static $count = 0; // 静态变量
    $count++;
    echo $count;
}

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

5.7 变量技巧

5.7.1 变量的引用传递

默认情况下,PHP中的变量是通过值传递的,这意味着在函数内部对变量的更改不会影响函数外部的变量。但是,您可以使用引用传递来让函数修改外部变量。例如:

function increment(&$num) {
    $num++;
}

$count = 0;
increment($count);
echo $count; // 输出:1

在函数参数前加上&符号将参数声明为引用。

5.7.2 变量的动态变量名

在PHP中,您可以使用变量的值作为另一个变量的名称。这被称为动态变量名。例如:

$fruit = "apple";
$apple = "A delicious fruit";
echo $$fruit; // 输出:A delicious fruit

$$fruit将使用$fruit的值作为变量名称,即$apple

5.8 超全局变量

PHP提供了一些特殊的全局变量,称为超全局变量。这些变量在脚本的任何地方都可用,并且不需要使用global关键字来访问。一些常见的超全局变量包括$_GET$_POST$_SERVER等。例如:

echo $_GET['name']; // 输出URL参数中的name值
echo $_POST['email']; // 输出表单提交中的email值
echo $_SERVER['REMOTE_ADDR']; // 输出客户端IP地址
超全局变量 说明
$_GET 地址栏 GET 提交
$_POST 表单 POST 提交
$_FILES 文件上传变量
$_SESSION 会话变量
$_COOKIE cookie 值变量
$_GLOBALS 全局变量
$_REQUEST 包含$_GET,$_POST,$_COOKIE
$_SERVER 服务器环境变量

5.9 常量命名和规则

常量命名规则

在PHP中,常量名通常使用大写字母,并且建议使用下划线来分隔单词。

  • 常量前面没有定义变量符号 ”$“
  • 常量只能用 define() 函数定义,而不能通过赋值语句
  • 常量一旦定义就不能被重新定义或者取消定义
  • 常量的值用来定义 整型,浮点,字符串,布尔值,数组
  • 常量可以不用理会变量范围的可以在任何位置访问

例如:

define("PI", 3.14);
define("MAX_SIZE", 100);

//---------------------------------------

define("FRUITS", ["apple", "banana", "orange"]);
echo FRUITS[0]; // 输出:apple
echo FRUITS[1]; // 输出:banana
echo FRUITS[2]; // 输出:orange

5.9.1 常量声明

在PHP中,可以使用define()函数来定义常量。define()函数接受两个参数。例如:

define("PI", 3.14);

自PHP 7.3起,常量默认是大小写敏感的,并且不再支持通过第三个参数来声明大小写不敏感的常量。

5.9.2常量使用

定义常量后,可以在整个脚本中使用它们,无论是在函数内部还是在函数外部。要访问常量的值,只需使用常量名称即可。例如:

define("PI", 3.14);
echo PI; // 输出:3.14
5.9.3预定义常量

PHP还提供了一些预定义的常量,它们在整个脚本中都可用。一些常见的预定义常量包括:

  • __FILE__: 当前脚本的文件名(包含完整路径)
  • __LINE__: 当前脚本中的行号
  • __DIR__: 当前脚本所在的目录
  • __FUNCTION__: 当前函数的名称
  • __CLASS__: 当前类的名称
  • __METHOD__: 当前方法的名称

例如:

echo __FILE__; // 输出当前脚本的文件名
echo __LINE__; // 输出当前脚本中的行号

5.10常量用例

5.10.1 存储配置信息

常量非常适合存储配置信息,例如数据库连接信息、API密钥等。通过将这些敏感信息存储为常量,可以确保它们在整个脚本中不会被更改。

define("DB_HOST", "localhost");
define("DB_USERNAME", "myuser");
define("DB_PASSWORD", "mypassword");
5.10.2 枚举值

常量可以用于定义枚举值,即一组相关的命名常量。您可以使用这些常量来表示不同的颜色。例如,假设您想定义一些颜色常量:

define("COLOR_RED", "red");
define("COLOR_GREEN", "green");
define("COLOR_BLUE", "blue");
5.10.3 数学常量

PHP提供了一些内置的数学常量,方便在数学运算中使用,具体可以查阅PHP手册。例如:

echo M_PI; // 输出圆周率π的值
echo M_E; // 输出自然对数的底数e的值
5.10.4条件编译

常量还可以用于条件编译。根据不同的条件,您可以定义不同的常量值。然后,您可以根据这些常量的值来执行不同的代码块。例如:

define("DEBUG_MODE", true);

if (DEBUG_MODE) {
    // 执行调试模式下的代码
} else {
    // 执行非调试模式下的代码
}

6、运算符

6.1 算术运算符
运算符 说明
$a+$b 加法$a 和$b 的和
$a-$b 减法 $a 和$b 的差
$a*$b 乘法 $a 和$b 的积
$a/$b 除法 $a 除以$b 的商
$a%$b 取模 $a 除以$b 后的余
++$a 前加 $a 的值先加一,然后进行操作
$a++ 后加 $a 的值先进行操作,后加一
--$a 前减 $a 的值先减一,然后进行操作
$a-- 后减 $a 的值先进行操作,后减一
$a = 5;
$b = 3;
$result = $a + $b; // $result 的值为 8
$a = 5;
$b = 3;
$result = $a - $b; // $result 的值为 2
$a = 5;
$b = 3;
$result = $a * $b; // $result 的值为 15
$a = 10;
$b = 2;
$result = $a / $b; // $result 的值为 5
$a = 10;
$b = 3;
$result = $a % $b; // $result 的值为 1
$a = 2;
$b = 3;
$result = $a ** $b; // $result 的值为 8
$a = 5;
echo ++$a; // 输出:6
echo $a;   // 输出:6
$a = 5;
echo $a++; // 输出:5
echo $a;   // 输出:6
$a = 5;
echo $a--; // 输出:5
echo $a;   // 输出:4
$a = 5;
echo --$a; // 输出:4
echo $a;   // 输出:4
6.2 赋值运算符
运算符 说明
= 右边值赋值给左边变量
+= 左边值加上右边值赋值给左边变量
-= 左边值减掉右边值赋值给左边变量
*= 左边值乘以右边值赋值给左边变量
/= 左边值除以右边值赋值给左边变量
.= 左边字符串连接到右边变量后面
%= 左边值对右边值取余数后赋值给左边变量
6.3 字符串运算符
运算符 说明
. 它返回其左右参数连接后的字符串
.= 左边字符串连接到右边变量后面
6.4 比较运算符
运算符 说明
$a==$b 等于 TRUE,如果 a 等于 a 等于 a等于b
$a===$b 全等于 TRUE,如果 a 等于 a 等于 a等于b,并且类型也相同
$a!=$b 不等 TRUE,如果 a 不等于 a 不等于 a不等于b
$a<>$b 不等 TRUE,如果 a 不等于 a 不等于 a不等于b
$a!==$b 非全等 TRUE,如果 a 不等于 a 不等于 a不等于b,或者类型不同
$a<$b 小于 TRUE,如果 a 严格小于 a 严格小于 a严格小于b
$a>$b 大于 TRUE,如果 a 严格 a 严格 a严格b
$a<=$b 小于等于 TRUE,如果 a 小于或者等于 a 小于或者等于 a小于或者等于b
$a>=$b 大于等于 TRUE,如果 a 大于或者等于 a 大于或者等于 a大于或者等于b
6.5 逻辑运算符
运算符 说明
$a and $b 逻辑与 TRUE,如果 $a 与 $b 都为 TRUE
$a or $b 逻辑或 TRUE,如果 $a 或 $b 任一为 TRUE
!$a 逻辑非 TRUE,如果 $a 不为 TRUE
$a && $b 逻辑与 TRUE,如果 $a 与 $b 都为 TRUE
`$a
6.6 三元表达式
变量 = 条件 ? 值1 : 值2;

当表达式的条件 true 时, 变量 = 值 1 否则 变量 = 值 2

变量?? "默认值";

??操作符是空合并运算符,它用于简化对变量是否为null的判断,并在变量为null时提供一个默认值。 注意是:null

$s1 = null;
echo $s1?? "888"; //结果:888

$s2 = 0;
echo $s2?? 888; // 结果为:0

$s3 = flase;
echo $s3?? 888; // 结果为:不显示

$s4 = true;
echo $s4?? 888; // 结果为:1

7、流程控制

7.1 if/elseif/else

用于执行条件分支的控制结构。它们可以根据条件的真假执行不同的代码块

if (条件1) {
    // 当条件1为真时执行的代码块
} elseif (条件2) {
    // 当条件1为假而条件2为真时执行的代码块
} else {
    // 当所有条件都为假时执行的代码块
}

$age = 25;
if ($age < 18) {
    echo "未成年人";
} elseif ($age >= 18 && $age < 65) {
    echo "成年人";
} else {
    echo "老年人";
}
7.2 switch

用于执行多个条件分支的控制结构。根据表达式的值选择不同的代码块进行执行

switch (表达式) {
    case1:
        // 当表达式的值等于值1时执行的代码块
        break;
    case2:
        // 当表达式的值等于值2时执行的代码块
        break;
    // 可以有多个case块
    default:
        // 当表达式的值与所有case的值都不匹配时执行的代码块
        break;
}


$day = "Monday";

switch ($day) {
    case "Monday":
        echo "星期一";
        break;
    case "Tuesday":
        echo "星期二";
        break;
    case "Wednesday":
        echo "星期三";
        break;
    case "Thursday":
        echo "星期四";
        break;
    case "Friday":
        echo "星期五";
        break;
    default:
        echo "周末";
        break;
}

注意:如果在 switch 语句的 case 块中没有使用 break 语句,程序将会继续执行后续的 case 块,而不会跳出 switch 语句。

$day = "Monday";
switch ($day) {
    case "Monday":
        echo "Today is Monday.";
    case "Tuesday":
        echo "Tomorrow is Tuesday.";
    case "Wednesday":
        echo "The day after tomorrow is Wednesday.";
    default:
        echo "Other days.";
}

/** 
结果为:  Today is Monday.
        Tomorrow is Tuesday.
        The day after tomorrow is Wednesday.
        Other days.
*/
7.3 while

是一种常用的循环控制结构,用于在满足条件的情况下重复执行一段代码块。

while (条件) {
    // 循环体中的代码
}


$count = 1;
while ($count <= 5) {
    echo $count . " ";
    $count++;
}
7.4 do while

是一种循环控制结构,类似于 while 循环,但它会先执行一次循环体中的代码,然后再检查条件是否为真,如果条件为真,则继续执行循环。

do {
    // 循环体中的代码
} while (条件);

$count = 1;
do {
    echo $count . " ";
    $count++;
} while ($count <= 5);

7.5 for

是一种常用的循环控制结构,用于在指定的条件下重复执行一段代码块,并控制循环变量的增量。

for (初始表达式; 条件表达式; 增量表达式) {
    // 循环体中的代码
}

for ($i = 1; $i <= 5; $i++) {
    echo $i . " ";
}

注意: 循环的时候必须设置停止循环的条件,不然呵呵~ 死机了吧!

7.6 breakcontinue
  • break 语句用于立即终止当前循环(例如 forwhiledo while 循环),并跳出循环体,继续执行循环后的代码。它可以用于提前结束循环,无论是否满足循环条件。当程序执行到 break 语句时,循环会立即结束,不再执行循环体内剩余的代码。

  • continue 语句用于跳过当前循环的剩余代码,立即进入下一次循环迭代。当程序执行到 continue 语句时,循环会跳过当前迭代的剩余代码,直接进入下一次迭代。它可以用于跳过某些特定条件下的迭代操作。

for ($i = 1; $i <= 10; $i++) {
    if ($i == 5) {
        break;
    }
    echo $i . " ";
}



for ($i = 1; $i <= 5; $i++) {
    if ($i == 3) {
        continue;
    }
    echo $i . " ";
}

8、日期时间

8.1 时区
  1. PHP.ini 配置 date.timezone = PRC` (不推荐)

  2. 脚本中修改 (推荐使用)

    date_default_timezone_get() //取得当前使用时区
    date_default_timezone_set() //设定当前使用时区
    
8.2 DateTime

PHP提供了一个内置的DateTime类和一些相关的函数,用于处理日期和时间的创建、格式化、计算等操作。

//获取当前日期和时间:
$timeNow = new DateTime(); // 当前日期和时间
$dateNow = $timeNow->format('Y-m-d'); // 当前日期
$timeNow = $timeNow->format('H:i:s'); // 当前时间

//格式化日期和时间:
$dateTime = new DateTime('2021-12-01 14:30:00');
$formattedDateTime = $dateTime->format('Y-m-d H:i:s'); // 格式化为字符串

//解析日期和时间:
$dateString = '2021-12-01 14:30:00';
$dateTime = DateTime::createFromFormat('Y-m-d H:i:s', $dateString); // 解析字符串为日期对象

//计算日期和时间:
$dateTime = new DateTime('2021-12-01');
$dateTime->modify('+1 day'); // 添加一天
$newDate = $dateTime->format('Y-m-d'); // 修改后的日期

//比较日期和时间
$dateTime1 = new DateTime('2021-12-01');
$dateTime2 = new DateTime('2022-01-01');

if ($dateTime1 < $dateTime2) {
    // 日期1早于日期2
}

//格式化输出相对时间:
$dateTime = new DateTime('2021-12-01');
$now = new DateTime();
$diff = $dateTime->diff($now); // 计算日期差
$relativeTime = $diff->format('%y years, %m months, %d days'); // 格式化为相对时间

9、文件引入

includerequireinclude_oncerequire_once是用于在脚本中包含其他文件的语句。它们的功能类似,但在文件包含的方式和错误处理方面有一些不同。

include`:用于包含指定文件,并在包含过程中产生一个警告(非致命错误),如果包含的文件不存在或发生其他错误,脚本会继续执行。

include 'file.php';

require:用于包含指定文件,并在包含过程中产生一个致命错误,如果包含的文件不存在或发生其他错误,脚本会停止执行

require 'file.php';

include_once:与include类似,但是如果同一个文件已经被包含过,include_once会检查并确保文件不会被重复包含。这避免了重复定义函数、类或变量等问题。

include_once 'file.php';

require_once:与require类似,但是如果同一个文件已经被包含过,require_once会检查并确保文件不会被重复包含。这避免了重复定义函数、类或变量等问题。

require_once 'file.php';

使用includerequire语句时,可以包含任何PHP文件,包括库文件、模块文件等。被包含的文件可以是相对于当前脚本文件的路径或绝对路径。

需要注意以下几点:

  • includerequire语句在包含文件时,会创建一个新的局部作用域,包含的文件中定义的函数、类和变量在包含语句后可用。
  • 如果包含的文件中有语法错误或其他错误,include会产生一个警告并继续执行,require会产生一个致命错误并停止执行。
  • include_oncerequire_once语句在包含文件时,会检查文件是否已经被包含过,避免重复包含相同文件。
  • 推荐在包含文件时使用requirerequire_once,因为如果被包含文件是必需的(例如核心库文件),则应该确保它们存在,以避免脚本出现严重错误。

你可能感兴趣的:(PHP全世界最好的语言,php,开发语言,javascript,golang,lavarel,gin,个人开发)