PHP
基础知识 菜鸟教程
https://www.runoob.com/php/php-syntax.html
1. PHP 语法
- PHP 脚本可以放在文档中的任何位置。
- PHP 脚本以
<?php
开始,以?>
结束: - PHP 每行代码用 分隔符
;
来区分指令集 - 注释:
//
单行/*....*/
多行注释
2. PHP 变量
-
PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
-
PHP 本身是弱类型语言,声明时不需要指明数据类型。
-
变量作用域
-
local (应该说的是函数里的变量外面没法用)
-
global (函数中使用全局变量时用 global声明,如
global $a;
或者用$GLOBALS
数组来代替,如$GLOBALS['a']
) -
static (只有第一次声明时a会被初始化为0,后面调用这个函数,a的值会不断递加)
1 2 3 4 5 6 7 8
<?php function test() { static $a = 0; echo $a; $a++; } ?>
-
parameter (参数作用域)
-
3. PHP echo/print
两个函数都可以加括号和不加括号来使用。
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "在 $txt2 学习 PHP ";
echo "<br>";
echo "我车的品牌是 {$cars[0]}";
echo "这是一个", "字符串,", "使用了", "多个", "参数。";
print "我车的品牌是 {$cars[0]}";
?>
4. PHP EOF(heredoc)
PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
使用概述:
- 必须后接分号,否则编译通不过。
- EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
- 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
//// 变量会被解析,html格式会被解析。
1
2
3
4
5
6
7
8
9
<?php
$name="runoob";
$a= <<<EOF
"abc"$name<br>
"<br>$name 123 $name"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
效果:
5. PHP 数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
6. PHP 常量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
注意:使用常量不能在常量前面加 $
7. PHP 字符串变量
在PHP中,只有一个字符串运算符 .
并置运算符。
相关函数:
- strlen
echo strlen("Hello world!");
- strpos
echo strpos("Hello world!","world");
会返回第一个匹配的字符位置 找不到 返回 FALSE
8. PHP 运算符
-
算术运算符:
+ - * / %
取反-x
并置.
PHP 7.0 增加了一个 intdiv函数
var_dump(intdiv(10, 3)); //返回3
-
赋值运算符 略
-
递增递减运算符 略
-
比较运算符 注意
==
===
!=
!==
对于数组而言,==
表示具有相同的键值对===
顺序也要相同 -
三元运算符
(expr1) ? (expr2) : (expr3)
PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
-
组合比较符 (PHP7+) 也称之为太空船操作符
$c = $a <=> $b;
- 如果
$a > $b
, 则$c
的值为 1。 - 如果
$a == $b
, 则$c
的值为 0。 - 如果
$a < $b
, 则$c
的值为 -1。
- 如果
9. PHP IF..ELSE Switch
1
2
3
4
5
6
7
8
9
10
11
12
if (条件)
{
if 条件成立时执行的代码;
}
elseif (条件) // else if 也行
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
switch 和c语法基本没区别
10. PHP 数组
-
数值数组:其中的ID键自动建立,0开始,可用count()函数获取长度。
-
关联数组:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
遍历:
1 2 3 4 5 6 7 8 9
<?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?>
数组排序:
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
使用方式:
1
2
3
4
<?php
$cars=array("Volvo","BMW","Toyota");
sort($cars);
?>
11. 超级全局变量
PHP 超级全局变量列表:
- $GLOBALS:包含了全部变量的全局组合数组。变量的名字就是数组的键。
- $_SERVER:这个数组中的项目由 Web 服务器创建。
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
11. PHP循环
在 PHP 中,提供了下列循环语句:
-
while - 只要指定的条件成立,则循环执行代码块
-
do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
-
for - 循环执行代码块指定的次数
-
foreach - 根据数组中每个元素来循环代码块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?php $x=array("Google","Runoob","Taobao"); foreach ($x as $value) { echo $value . PHP_EOL; } ?> <?php $x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao"); foreach ($x as $key => $value) { echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL; } ?>
12. PHP魔术常量
-
__LINE__
文件中的当前行号。
-
__FILE__
返回目录 -
__FUNCITON__/__METHOD__
返回当前函数名,METHOD还会返回类名Class::func
-
__CLASS__
返回当前函数名 -
__NAMESPACE__
1 2 3 4 5
<?php namespace MyProject; echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject" ?>
-
__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>
通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<?php trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } } $o = new MyHelloWorld(); $o->sayHello(); $o->sayWorld(); $o->sayExclamationMark(); ?>
13. PHP namespace
PHP 命名空间可以解决以下两类问题:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
?>
1
2
3
4
<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
子命名空间:
1
2
3
4
5
6
7
8
<?php
namespace MyProject\Sub\Level; //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */ }
?>
未完待续:https://www.runoob.com/php/php-namespace.html
相关函数
htmlspecialchars()
php函数:htmlspecialchars()
1
2
3
4
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>
输出:This is some <b>bold</b> text.
该函数将预定义字符转换为实体
var_dump()
返回变量的数据类型和值