PHP
基础知识
<?php
#这是一个注释echo "<h1>hello world</h1>";
//字符串拼接$message="hello";$name="你好";$message."".$name;echo "<br>";//单引号与双引号的区别,单引号无法解析变量echo "my name is $name"; //my name is 你好echo 'my name is $name'; //my name is $nameecho "<br>";//调试函数var_dump($name); //string(6) "你好" //与echo区别是调试函数无返回值,还能查询变量的数据类型//常量定义,一般用大写字母
define("MESSAGE","hello 你好",true);//这种方法已被启用
const MESSAGE = "hello 你好";//布尔类型$x1 = true;$x2 = TRUE;//类型检测
if(is_bool($x1)){echo "我是布尔类型";
}//<<<提示符 定义heredoc类型的字符串#标识符 开始标记 结束标记$name1 = "张三";$message1 = <<<EOT<h1>这是一个标签</h1><div class="box">这是一个div<a>这是一个a标签</a></div>EOT;echo $message1;//数组$arr = {"1",2};$arr1 = [1,2,3,4];var_dump($arr); //array(2){[0]=>string(1)"1"[1]=>int(2)}echo "<br>";var_dump($arr1); //array(4){[0]=>int(1)[1]=>int(2)[2]=>int(3)[3]=>int(4)}//分配ID键$arr2 = ["count"=>"hello","foo"=>123];var_dump($arr2); //arry(2){["count"]=>string(5)"hello"["foo"]=>int(123)}
//运算符 ①连接运算符. ②连接赋值运算符.=$a="hello";$b=$a."world"; //hello world$a.="world"; //hello world//增删改查//增//删unset($arr[1]);unset($arr2["count"]);echo "<br>";//改echo $arr[0] = 2;echo $arr2["count"] = "你好";echo "<br>";//查echo $arr[0];echo "<br>";echo $arr2["count"];echo "<br>";//对象new Person(); //Person 类class Person{ //自定义的类var $count = 1;function getCount(){echo $this->count;}}$instance = new Person(); //Person类 实例对象//访问对象属性 js里是 对象.属性echo $instance->count;$instance->getCount();?>
网址unbug.github.io/codeIf/#加密
转换布尔值
- 当转换为boolean时,以下值被认为是FALSE:
- 布尔值FALSE本身
- 整形值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 “0”
- 不包括任何元素的数组
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的SimpleXML对象
- 所有其他值都被认为是TRUE(包括任何资源和NAN)
运算符
- 比较运算符,允许对两个值比较
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x==y | 等于 | 如果x等于y,则返回true | 5==8返回false |
x===y | 绝对等于 | 如果x等于y,且它们类型相同,则返回true | 5==“5”返回false |
x!=y | 不等于 | 如果x不等于y,则返回true | 5!==8返回true |
x<>y | 不等于 | 如果x不等于y,则返回true | 5<>8返回true |
x!===y | 绝对不等于 | 如果x不等于y,或它们的类型不相同,则返回true | 5!=="5"返回true |
x>y | 大于 | 如果x大于y,则返回true | 5>8返回false |
x<y | 小于 | 如果x小于y,则返回true | 5<8返回true |
x>=y | 大于等于 | 如果x大于或等于y,则返回true | 5>=8返回false |
x<=y | 小于等于 | 如果x小于或等于y,则返回true | 5<=8返回true |
- 逻辑运算符,将值进行逻辑运算。主要有与、或、非等逻辑。
运算符 | 名称 | 例子 | 结果 |
---|---|---|---|
and | 与 | $x and $y | 如果 x 和 x和 x和y都为true,则返回true |
&& | 与 | $x && $y | 如果 x 和 x和 x和y都为true,则返回true |
or | 或 | $x or $y | 如果 x 和 x和 x和y至少有一个为true,则返回true |
|| | 或 | $x || $y | 如果 x 和 x和 x和y至少有一个为true,则返回true |
xor | 异或 | $x xor $y | 如果 x 和 x和 x和y有且仅有一个为true,则返回true |
! | 非 | !$x | 如果$x不为true,则返回true |
- 运算符优先级表
结合方向 | 运算符 | 附加信息 |
---|---|---|
无 | clone new | clone和new |
左 | [ | array() |
右 | ++ – ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
无 | instanceof | 类型 |
右 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + - . | 算术运算符和字符串运算符 |
左 | << >> | 位运算符 |
无 | == != === !== <> | 比较运算符 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ?: | 三元运算符 |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
左 | , | 多处用到 |
- 数组运算符
运算符 | 名称 | 例子 | 结果 |
---|---|---|---|
+ | 联合 | $x + $y | x 和 x和 x和y的联合(但不覆盖重复的键) |
== | 相等 | $x == $y | 如果 x 和 x和 x和y拥有相同的键:值对,则返回true |
=== | 全等 | $x === $y | 如果 x 和 x和 x和y拥有相同的键:值对,且顺序相同、类型相同则返回true |
!= | 不相等 | $x != $y | 如果 x 不等于 x不等于 x不等于y,则返回true |
<> | 不相等 | $x <> $y | 如果 x 不等于 x不等于 x不等于y,则返回true |
!=== | 不全等 | $x !=== $y | 如果 x 与 x与 x与y不完全相同,则返回true |
- 递增/递减运算符
- PHP支持C风格的前后递增与递减运算符
- 递增/递减运算符不影响布尔值。递减NULL值没有效果,但是递增NULL的结果是1,也就是说递增/递减运算过程中,不会把操作数转换成整数后再运算,如果操作数是布尔值,则直接返回结果
例子 | 名称 | 效果 |
---|---|---|
++$a | 前加 | a 的值加一,然后返回 a的值加一,然后返回 a的值加一,然后返回a |
$a++ | 后加 | 返回 a ,然后将 a,然后将 a,然后将a的值加一 |
-$a | 前减 | a 的值减一,然后返回 a的值减一,然后返回 a的值减一,然后返回a |
$a- | 后减 | 返回 a ,然后将 a,然后将 a,然后将a的值减一 |
- 新增运算符
//在PHP7+版本多了一个NULL合并运算符??,实例如下(①②两个作用一样)#①如果$_GET['user']不存在返回'nobody',则返回$_GET['user']的值$username = $_GET['user'] ?? 'nobody';#②类似的三元运算符$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';//在PHP7+支持组合比较符也称为太空船操作符,符号为<=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较#语法格式$c = $a <=> $b;#解析如下如果$a > $b,则$c的值为1; echo 2 <=> 1; //1如果$a == $b,则$c的值为0; echo 1 <=> 1; //0如果$a < $b,则$c的值为-1。 echo 1 <=> 2; //-1
类型比较
- 虽然PHP是弱类型语言,但是也需要明白变量类型及它们的意义,因为我们经常需要对PHP变量进行比较,包含松散比较和严格比较:
- 松散比较:使用两个等号==比较,只比较值,不比较类型
- 严格比较:用三个等号===比较,除了比较值还比较类型
- 比较多种类型
- null和string:将null转化成"",进行词汇的比较
- bool和任意其他的类型:转化为bool FALSE|TRUE
- string和number:将字符串转化成数字,按照普通数学比较
特殊语句
-
foreach语句:用于遍历数组,仅能用于数组和对象。每进行一次循环,当前数组元素的值就会被赋值给$value变量(数组指针会逐一地移动),在进行下一次循环时,将看到数组中的下一个值
- foreach($array as $value){ 要执行的代码; }
-
continue与break
-
在PHP中break和continue语句都可以用来跳出循环,包括while、do while、for和foreach循环。不同的是continue命令会终止循环体的单次循环,代码继续往下执行下一次循环,而break会终止整个循环体的循环。
-
continue
for($i=0;$i<10;$i++){if($i=3){continue; //打印结果:012456789}echo $i; }
-
break
for($i=0;$i<10;$i++){if($i=3){break; //打印结果:012}echo $i; }
-
超全局变量
-
超全局变量是在全部作用域中始终可用的内置变量。PHP中的许多预定义变量都是超全局的,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global v a r i a b l e ; 就可以访问它们。常用的超全局变量有 variable;就可以访问它们。常用的超全局变量有 variable;就可以访问它们。常用的超全局变量有GLOBALS、$ _SERVER、$ _GET、$ _POST、$ _FILES、$ _COOKIE、$ _SESSION、$ _REQUEST、$ _ENV。//该部分内容详情看https://blog.csdn.net/zhichaosong/article/details/80507516
-
$GLOBALS:
-
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
-
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
-
主要用于在局部范围不可以使用全局变量时,但又需要使用该全局变量,就使用$GLOBALS。
<?php $x = 75; $y = 25;function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; }addition(); echo $z; ?>
-
-
$ _REQUEST:
-
PHP $_REQUEST 用于收集 HTML 表单提交的数据。可以接受post和get两种方式的值
//以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据: <html> <body><form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">Name: <input type="text" name="fname"><input type="submit" value="提交"></form><?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>
-
-
$ _POST:
-
PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”
//以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据: <html> <body><form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form><?php $name = $_POST['fname']; echo $name; ?></body> </html>
-
-
$ _GET:
-
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。
$_GET 也可以收集URL中发送的数据
//假设有一个包含参数的超链接HTML页面: <html> <body><a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a></body> </html> //当用户点击链接 "Test $GET", 参数 "subject" 和 "web" 将发送至"test_get.php",你可以在 "test_get.php" 文件中使用 $_GET 变量来获取这些数据。 以下实例显示了 "test_get.php" 文件的代码: <html> <body><?php echo "Study " . $_GET['subject'] . " @ " . $_GET['web']; ?></body> </html>
-
-
$ _SERVER:
-
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目.
//以下实例中展示了如何使用$_SERVER中的元素: <?php echo $_SERVER['PHP_SELF']; echo "<br>"; echo $_SERVER['SERVER_NAME']; echo "<br>"; echo $_SERVER['HTTP_HOST']; echo "<br>"; echo $_SERVER['HTTP_REFERER']; echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<br>"; echo $_SERVER['SCRIPT_NAME']; ?>
-
-
$ _COOKIE:
-
用于会话控制,cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
//①创建Cookie//语法setcookie(name, value, expire, path, domain);//示例 <?php setcookie("user", "Alex Porter", time()+3600); /*创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一 小时后过期*/ ?><html> <body></body> </html>//②取回Cookie值 //示例a:取回了名为 "user" 的 cookie 的值,并把它显示在了页面上 <?php // Print a cookie echo $_COOKIE["user"];// A way to view all cookies print_r($_COOKIE); ?>//示例b:使用 isset() 函数来确认是否已设置了 cookie <html> <body><?php if (isset($_COOKIE["user"]))echo "Welcome " . $_COOKIE["user"] . "!<br />"; elseecho "Welcome guest!<br />"; ?></body> </html>
-
-
$ _SESSION:
-
用于会话控制,PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
-
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
-
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
-
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
//①开始 PHP Session :/*在您把用户信息存储到 PHP session 中之前,首先必须启动会话。session_start() 函数必须位于 标签之前*/ <?php session_start(); ?><html> <body></body> </html>//②存储 和使用Session 变量: <?php session_start(); // store session data $_SESSION['views']=1; ?><html> <body><?php //retrieve session data echo "Pageviews=". $_SESSION['views']; ?></body> </html>//③终结 Session /*如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。*/ //通过 unset() 函数用于释放指定的 session 变量: <?php unset($_SESSION['views']); ?>/*通过 session_destroy() 函数彻底终结 session,将重置 session,您将失去所有已存储的 session 数据。*/ <?php session_destroy(); ?>
-
-
-
$ _ENV:
-
服务器端环境变量。PHP中的$_ENV是一个包含服务器端环境变量的数组,不同系统不完全一样。
部分变量示例:
$_ENV[ ‘HOSTNAME’ ] 服务器的主机名
$_ENV[ ‘SHELL’ ] 系统 shell//$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素,你可以尝试直接输出它: //输出内容格式清晰,ThinkPHP可以直接用dump() var_dump($_ENV);//输出到屏幕 print_r($_ENV);//输出key-value键值对 foreach($_ENV as $key=>$val){echo $key.'--------'.$val.'<br>';}
-
-
$ _FILES:
- 上传文件使用,$_FILES 主要用在当需要上传二进制文件的地方,录入上传一个abc.mp3文件,则服务器端需要获得该文件的相关信息,则通过变量 F I L E S 来取得。 _FILES 来取得。 FILES来取得。_FILES 超级全局变量包含通过POST方法向服务器上传的数据的有关信息。这个超级全局变量与其他的变量有所不同,它是一个二维数组,包含5个元素。
//前段上传文件示例代码 /**创建一个文件上传表单 允许用户从表单上传文件是非常有用的。 请看下面这个供上传文件的 HTML 表单:**/ <html> <body><form action="upload_file.php" method="post" enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" id="file" /> <input type="submit" name="submit" value="Submit" /></form> </body> </html>//后端处理文件示例代码: <?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)){if ($_FILES["file"]["error"] > 0){echo "Return Code: " . $_FILES["file"]["error"] . "<br />";}else{echo "Upload: " . $_FILES["file"]["name"] . "<br />";echo "Type: " . $_FILES["file"]["type"] . "<br />";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";if (file_exists("upload/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " already exists. ";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);echo "Stored in: " . "upload/" . $_FILES["file"]["name"];}}} else{echo "Invalid file";} ?>
-