PHP基础
PHP基础
#php
[toc]
本篇php基础更多的是个人文档,而并非是教程,用于日常查询语法所用。 php安装教程: [[php环境安装]]
0.环境安装
建议使用lamp或lnmp,因为一些依赖上的东西需要一个个打,所以,直接使用一键安装来迅速建立依赖环境不失为更好的选择,当然还是要根据具体的项目进行搭建环境。
lnmp:LNMP一键安装包 - CentOS/RadHat/Debian/Ubuntu下自动编译安装Nginx,PHP,MySQL,PHPMyAdmin
或者查看我的另一份基于docker的环境快速构建:环境构建
1.基础语法
1.1 开始
1.1.1 文件
php文件后缀为.php,文件开始为:<?php结束为: ?>在这个标签中编写的代码才被计算机认为是php代码,编写的代码才能被解析到,标签之外的文本可以被解析为html。
创建php变量为:
<?php
$a = "waw";
$b = 123;
$c = 1.2;
$d = [];
由此可见php为弱类型语言,定义时无需提前声明这个变量的类型是什么。
1.1.2 作用域
<?php
$x=5; // 全局变量
function myTest()
{
$y=10; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}
myTest();
echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>
php的全局变量和局部变量有着限制,全局的不能更改局部的,但是局部的可以更改全局的,局部提升至全局可以通过global关键字,但是不建议使用该关键字,定义变量因遵循:所有变量应是局部变量,全局只存在静态或动态函数,若需要使用配置,配置应该由函数出现。
1.1.3 打印语句
打印有echo,print,var_dump
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
var_dump("<br>");
print "在 $txt2 学习 PHP ";
print_r("123456");
?>
echo关键字 直接打印字符串,可将打印的html标签转义 print关键字 直接打印字符串,可将打印的html标签转义 print_r() 函数用于打印变量,以更容易理解的形式展示。 var_dump() 函数用于打印变量,以更容易理解的形式展示,接收一个或对多个值(值不仅可以是字符串,也可以是其他任意类型)没有返回值。 echo可以输出一个或多个字符串,print只允许输出一个字符串,返回值总为 1
特殊字符: EOF 使用:
<?php
echo <<<EOF
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>
1.1.4 数据结构
PHP 变量存储不同的类型的数据,不同的数据类型可以做不一样的事情。 PHP 支持以下几种数据类型:
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- Resource(资源类型)
切记在尽可能的不要使用浮点数,出现浮点数时采用乘除去点法 在实际应用中只是尽可能与数据库操作时不要使用浮点数,容易造成精度丢失,但是在脚本内使用还是可以的
1.1.5 类型比较
<?php
echo '0 == false: ';
var_dump(0 == false);
echo '0 === false: ';
var_dump(0 === false);
echo PHP_EOL;
echo '0 == null: ';
var_dump(0 == null);
echo '0 === null: ';
var_dump(0 === null);
echo PHP_EOL;
echo 'false == null: ';
var_dump(false == null);
echo 'false === null: ';
var_dump(false === null);
echo PHP_EOL;
echo '"0" == false: ';
var_dump("0" == false);
echo '"0" === false: ';
var_dump("0" === false);
echo PHP_EOL;
echo '"0" == null: ';
var_dump("0" == null);
echo '"0" === null: ';
var_dump("0" === null);
echo PHP_EOL;
echo '"" == false: ';
var_dump("" == false);
echo '"" === false: ';
var_dump("" === false);
echo PHP_EOL;
echo '"" == null: ';
var_dump("" == null);
echo '"" === null: ';
var_dump("" === null);
结果
0 == false: bool(true)
0 === false: bool(false)
0 == null: bool(true)
0 === null: bool(false)
false == null: bool(true)
false === null: bool(false)
"0" == false: bool(true)
"0" === false: bool(false)
"0" == null: bool(false)
"0" === null: bool(false)
"" == false: bool(true)
"" === false: bool(false)
"" == null: bool(true)
"" === null: bool(false)
1.1.6 常量
<?php // 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义
?>
常量一般用于配置化的东西,但是在业务流程当中不要定义常量,常量定义在工程初始化的时候。常量是全局变量。
1.1.7 字符串
<?php
$a = "123456"
//$a是字符串
$b = "789"
$c = $a.$b
//$c:123456789
$d = strlen($c)
//$d:9
$e = strpos($c,"78")
//$e:6
使用字符串时,要注意以下几点:
- 字符串使用"."来连接字符而不是"+"
- strlen()函数是计算字符串的字节长度,根据所给的字符集所决定,例如在gb2313下的汉字是2个字节长度,而在utf-8则是3个字节长度,所以在使用该函数时要注意当前所在的字符集。
- strpos()函数是输出查找文本在被查找出现的第一个位置
1.1.8 运算符
| 运算符 | 名称 | 描述 | 实例 | 结果 |
|---|---|---|---|---|
| x + y | 加 | x 和 y 的和 | 2 + 2 | 4 |
| x - y | 减 | x 和 y 的差 | 5 - 2 | 3 |
| x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 |
| x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
| x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 | 1 |
| -x | 设置负数 | 取 x 的相反符号 | $x=2 echo -x | -2 |
| ~x | 取反 | 二进制取反方式 | ||
| a.b | 并置 | 连接两个字符串 | "A"."B" | AB |
| 运算符 | 等同于 | 描述 |
|---|---|---|
| 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 | 模(除法的余数) |
| a .= b | a = a . b | 连接两个字符串 |
| 运算符 | 名称 | 描述 |
|---|---|---|
| ++ x | 预递增 | x 加 1,然后返回 x |
| x ++ | 后递增 | 返回 x,然后 x 加 1 |
| -- x | 预递减 | x 减 1,然后返回 x |
| x -- | 后递减 | 返回 x,然后 x 减 1 |
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| 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 |
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true |
| x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x 6 or y5) 返回 true |
| x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x6 xor y3) 返回 false |
| x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
| x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 | |
| ! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true |
| 运算符 | 名称 | 描述 |
|---|---|---|
| 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 |
组合比较符(PHP7+)
PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式如下:
$c = $a <=> $b;
解析如下:
- 如果 $a >
c 的值为 1。 - 如果 $a ==
c 的值为 0。 - 如果 $a <
c 的值为 -1。 | 结合方向 | 运算符 | 附加信息 | |------|----------------------------------------------------------|--------------| | 无 | clone new | clone 和 new | | 左 | [ | array() | | 右 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 | | 无 | instanceof | 类型 | | 右 | ! | 逻辑运算符 | | 左 | * / % | 算术运算符 | | 左 | + – . | 算术运算符和字符串运算符 | | 左 | << >> | 位运算符 | | 无 | == != === !== <> | 比较运算符 | | 左 | & | 位运算符和引用 | | 左 | ^ | 位运算符 | | 左 | | | 位运算符 | | 左 | && | 逻辑运算符 | | 左 | || | 逻辑运算符 | | 左 | ? : | 三元运算符 | | 右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 | | 左 | and | 逻辑运算符 | | 左 | xor | 逻辑运算符 | | 左 | or | 逻辑运算符 | | 左 | , | 多处用到 |
1.1.9 if..else 和switch
暂时忽略,因为没有特殊的用法
1.2.0 数组
数组分为索引数组和键值数组
<?php
$a = [1,2,3]
$b = ["a"=>1,"b"=>2,"c"=>3]
这里的$a就是索引数组$b是键值数组 所有跟数组所做的操作见数组章
1.2.1 超级全局变量
<?php
$GLOBALS //超级全局变量组
$_SERVER //http请求报文信息
$_REQUEST //http请求信息
$_POST //httpPost方法请求体
$_GET //httpGet方法请求体
$_FILES //http表单上传文件方法请求体
$_ENV //服务端环境变量
$_COOKIE //服务端传输用cookie
$_SESSION //服务端session
1.2.2 for循环和while
见 PHP For 循环 | 菜鸟教程 (runoob.com)PHP While 循环 | 菜鸟教程 (runoob.com)
1.2.3 函数
基础函数函数用法见: PHP 函数 | 菜鸟教程 (runoob.com)
1.2.4魔术常量
| 名称 | 描述 |
|---|---|
| __ LINE __ | 文件中的当前行号。 |
| __ FILE __ | 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 |
| __ DIR __ | 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。 |
| __ FUNCTION __ | 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 |
| __ CLASS __ | 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。注意自 PHP 5.4 起 __ CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__ CLASS__ 是调用 trait 方法的类的名字。 |
| __ TRAIT __ | Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。 |
| __ METHOD __ | 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 |
| __ NAMESPACE __ | 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。 |
1.2.5 命名空间
见: PHP 命名空间(namespace) | 菜鸟教程 (runoob.com)
1.2.6 面对对象
见: PHP 面向对象 | 菜鸟教程 (runoob.com)
2.8.错误处理
见菜鸟
2.9.异常处理
见菜鸟
以上为php基础内容