PHP基础知识学习笔记

编程 · 2023-11-10 · 264 人浏览

官网

PHP官网:https://www.php.net/

文档下载:https://www.php.net/distributions/manual/php_enhanced_zh.chm

echo和print

  • echo能够输出一个以上的字符串,逗号隔开
  • print只能输出一个字符串,并始终返回1
  • echo比print稍快,并且开销低

CLI

PHP CLI是PHP语言的命令行解释器。

<?php
echo '请输入内容:';
$input = fgets(STDIN);
echo '输入内容是:' . $input;

执行脚本:php test.php

交互式Shell

$ php -a
Interactive shell

php > echo PHP_OS;
WINNT
php > echo PHP_VERSION;
7.3.4

数据类型

var_dump($a);会返回变量的数据类型和值,一般开发调试时使用,只获取数据类型用echo gettype($a);

字符串

<?php
$s = 'abc';
echo '$s'; //$s
echo "$s"; //abc
echo "hello $s 123"; //hello abc 123
echo "hello {$s} 123"; //hello abc 123

Resource资源类型

<?php
$handle = fopen('test.txt', 'r');
var_dump($handle); //resource(5) of type (stream)
echo is_resource($handle); //1
echo gettype($handle); //resource
echo get_resource_type($handle); //stream

$content = fread($handle, filesize('test.txt'));
echo $content;

fclose($handle);

EOF(heredoc)定界符

以<<<EOF标记开始,以EOF标记结束,结束标记必须顶头写,独占一行,不能有缩进和空格,结束标记末尾要有分号。

位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。

<?php
$a = '123';
echo <<<EOF
ABC$a abc'd
"ef
EOF;

运算符

算术运算符

<?php
// 整除,参数必须是整数,向下取整,结果 3
$a = intdiv(10, 3);
echo $a;

比较运算符

and和&&,or和||的区别主要体现在优先级:&&的优先级比and高,||的优先级比or高。

空合并运算符

PHP 7新特性,用于简化处理可能为null的变量或数组元素的情况。它的作用是判断一个变量是否未定义或者为null,是则返回指定的默认值,否则返回该变量的值。

<?php
$name = $username ?? '我是默认值';
echo $name; // 我是默认值

组合比较符

是一个三向比较运算符,它可以执行两个操作数之间的大于,小于和相等的比较。

<?php
$a = 1;
$b = 2;
$c = $a <=> $b;
echo $c; // -1

如果 $a>$b 则 $c=1;如果 $a==$b 则 $c=0;如果 $a<$b 则 $c=-1。

常量

常量被定义后,在脚本的其他任何地方都不能被改变,严格区分大小写,但无需$符。

<?php
define('PI', 3.14); // 第一种定义
const PI2 = 3.14; // 第二种定义
echo PI;
echo PHP_EOL;
echo PI2;

const和define的区别:

  • const不能在条件语句中定义常量
  • const可在类中使用,define不能

获取所有常量:

<?php
define('PI', 3.14);
$a = get_defined_constants(true); //获取所有常量
print_r($a);
print_r($a['user']);

魔术常量

它的值随着它在代码中的位置改变而改变。

  • __LINE__:获取文件中的当前行号
  • __FILE__:获取文件的完整路径和文件名
  • __DIR__:获取文件所在目录
  • __FUNCTION__:获取函数被定义时的名称
  • __CLASS__:获取类被定义时的名称
  • __METHOD__:包含了:命名空间 类名 方法名
  • __NAMESPACE__:当前命名空间的名称
  • __TRAIT__:当前使用的Trait名称
  • PHP_EOL:即\n

变量

unset()函数用于销毁给定的变量。

<?php
$a = 1;
unset($a);
var_dump($a); // NULL

在函数中不能unset()全局变量,想在函数中unset()全局变量,可使用$GLOBALS数组来实现:

<?php
$a = 1;
function test() {
    unset($GLOBALS['a']);
}
test();
var_dump($a); // NULL

isset()函数用于判断变量是否被定义并且非NULL。

empty()函数对于未定义的变量也会返回true,因此在使用该函数之前,应该确保变量已经被定义。

超全局变量

$GLOBALS是一个包含全部变量的全局组合数组,变量的名字就是数组的键。

$_SERVER是一个包含诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。

$_REQUEST变量包含了$_GET、$_POST和$_COOKIE的内容。

可变变量

<?php
$a = 'test';
$$a = 'test2'; // 即 $test
$$$a = 'test3';
echo $a;
echo PHP_EOL;
echo $test; // test2
echo PHP_EOL;
echo $test2; // test3

传址

<?php
$a = 1;
$b = &$a;
$b = 2;
echo $a; //2
echo $b; //2

数组

索引数组

<?php
$arr = ['a', 'b', 'c'];
print_r($arr);
print_r($arr[1]);

关联数组

<?php
$age = ['张三' => 18, '李四' => 19, '王五' => 20];
print_r($age);
print_r($age['张三']);
// 获取数组长度
echo PHP_EOL . count($age);

遍历数组

<?php
$age = ['张三' => 18, '李四' => 19, '王五' => 20];

foreach ($age as $value) {
    echo $value . PHP_EOL;
}

foreach ($age as $key => $value) {
    echo $key . ':' . $value . PHP_EOL;
}

list()

<?php
$arr = ['a', 'b', 'c'];
list($a,, $c) = $arr;
echo $a; //a
echo $c; //c

$arr2 = ['a' => 'a2', 'b' => 'b2', 'c' => 'c2'];
list('a' => $a2, 'c' => $c2) = $arr2;
echo $a2; //a2
echo $c2; //c2

数组运算符

只会保留第一个数组中的键值对,而忽略后面数组中相同键名的元素,如果想要合并两个数组并覆盖相同键名的元素,可以使用array_merge()函数。

<?php
$arr = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 'b', 'c' => 3, 'd' => 4];
print_r($arr + $arr2);
print_r($arr2 + $arr);
print_r(array_merge($arr, $arr2));

通过指针读取数组元素

<?php
$arr = ['a', 'b', 'c'];
echo current($arr); //a
echo key($arr); //数组下标 0
echo next($arr); //b
echo prev($arr); //a

函数

<?php
function nowTime($type = 'time') {
    if ($type == 'time') {
        echo date('Y-m-d H:i:s');
    } else if ($type == 'day') {
        echo date('Y-m-d');
    }
}

nowTime();

严格模式

<?php
// 开启严格模式
declare(strict_types=1);
function plus(int $a, int $b) {
    echo $a + $b;
}

plus(2, 3);
// plus('2', 3);

变量作用域

函数内部声明的变量是局部变量,仅能在函数内部访问;函数外部声明的变量是全局变量,除了函数外,可以被脚本中的任何部分访问,要在一个函数中访问全局变量,需要使用global关键字。

<?php
$a = 123;
function test() {
    global $a;
    echo $a;
}

test();

static作用域

当一个函数完成时,它的所有变量通常都会被删除。若想某个局部变量不要被删除,可在第一次声明变量时使用static关键字。

每次调用该函数时,该变量将会保留着函数前一次被调用时的值,但是该变量仍然是函数的局部变量。

<?php
function test() {
    static $a = 0;
    echo $a . PHP_EOL;
    $a++;
}

test(); // 0
test(); // 1
test(); // 2

函数所有参数

<?php
function test() {
    $args = func_get_args();
    $numArgs = func_num_args();
    print_r($args);
    print_r($numArgs);
}
test(1, 2, 3);

htmlspecialchars()函数

用于将字符串中的特殊字符转换为HTML实体,以避免在HTML文档中引起解析错误或安全漏洞。

包含文件

include和require语句

include和require除了处理错误的方式不同之外,在其他方面都是相同的。

  • require生成一个致命错误 (E_COMPILE_ERROR),在错误发生后脚本会停止执行
  • include生成一个警告 (E_WARNING),在错误发生后脚本会继续执行

include_once和require_once语句

和上面的一样,但只会调用一次,防止重复调用。

at符@

include前加at符@可用于屏蔽错误信息。

GET和POST

GET传输的最大容量通常不超过2048个字符(即2KB),POST对发送信息的量没有限制 (默认POST发送的最大值为8 MB,但可通过设置php.ini的post_max_size进行更改;发送的变量数最大值max_input_vars)。

PHP
Theme Jasmine by Kent Liao