PHP
PHP最新稳定版本:8.1.0
PHP基础知识
PHP简介
点击查看
- PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
false的七种情况
点击查看
字符串和数字用等于模糊判断时,字符串会被先转换成数字再进行对比
1
2
3
4
5
6
7 整型0
浮点0.0
布尔false
空字符串'',""
字符串'0'
空数组[]
NULL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $arr = [
"'0e123' == ''" => '0e123' == '',
"'0e123' == '0'" => '0e123' == '0',
"'0e123' == 0" => '0e123' == 0,
"'0e123' == 'e'" => '0e123' == 'e',
"'0e123' == '000'" => '0e123' == '000',
"'1e123' == '1'" => '1a000e123' == '1',
"'1e123' == 1" => '1a000e123' == 1,
"'000e123' == '0'" => '000e123' == '0',
"'e123' == 0" => 'a123' == 0,
"'e123' == '0'" => 'a123' == '0',
"null == 0" => null == 0,
"null == '0'" => null == '0',
"null == false" => null == false,
"[] == 0" => [] == 0,
"[] == '0'" => [] == '0',
"[] == false" => [] == false,
"false == 0" => false == 0,
"false == '0'" => false == '0',
];
foreach ($arr as $key => $value) {
echo '( ' . $key . ' ) => ' . ($value === true ? 'true' : 'false') . PHP_EOL;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ( '0e123' == '' ) => false
( '0e123' == '0' ) => true
( '0e123' == 0 ) => true
( '0e123' == 'e' ) => false
( '0e123' == '000' ) => true
( '1e123' == '1' ) => false
( '1e123' == 1 ) => true
( '000e123' == '0' ) => true
( 'e123' == 0 ) => true
( 'e123' == '0' ) => false
( null == 0 ) => true
( null == '0' ) => false
( null == false ) => true
( [] == 0 ) => false
( [] == '0' ) => false
( [] == false ) => true
( false == 0 ) => true
( false == '0' ) => true
NULL的三种情况
点击查看
- 直接赋值NULL
- 未定义变量
- unset销毁后的变量
常量
点击查看
一经定义,不可删除和修改
预定义常量
1 | 1. FILE 文件所在路径+文件名 |
引用变量
点击查看
用不同名字访问同一个变量内容,用『&』符号表示
超全局数组
点击查看
1 | $GLOBALS,包含下面8个超全局数组的值 |
1 | $_SERVER['SERVER_ADDR'] //服务器地址 |
抽象类和接口
点击查看
- 定义为抽象的类不能被实例化.
- 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
- 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
- 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
- 例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
- 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的.
1 | abstract class Animal { |
1 | cat: 喵喵叫~ |
- 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
- 接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
- 接口中定义的所有方法都必须是公有,这是接口的特性。
- 要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
- 实现多个接口时,接口中的方法不能有重名。
- 接口也可以继承,通过使用extends操作符.
- 类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误.
1 | interface Animal { |
1 | cat: 喵喵叫~ |
- 对接口的继承使用implements,抽象类使用extends
- 接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量
- 接口没有构造函数,抽象类可以有
- 接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰
- 一个类可以继承多个接口,但只能继承一个抽象类
- 接口的定义用interface,抽象类定义用abstract
运算符优先级
点击查看
浮点数值得精度丢失问题
点击查看
原因:因为计算机存储是二进制,准换进制时会有精度丢失
解决方案:先将浮点字符串化,再进行整数获取,输出可通过print
1 | $f = 0.57; |
Switch 问题
点击查看
switch 只能判断整型、浮点、字符
变量类型
点击查看
- 普通变量
- 全局变量,通过global定义,可以在局部域调用全局变量,可通过$GLOBAL[‘XXX’]读取变量的值
- 静态变量,通过static定义,仅在局部域中存在,执行函数离开作用域,其值也不会消失
打印处理
点击查看
- print() 仅输出单个变量
- printf() 按格式输出
- print_r() 格式化输出
- echo 输出多个变量
- sprintf() 按格式返回
- var_dump() 格式化输出,并输出变量类型
- var_export() 将格式化输出,加true可返回,返回内容可直接做变量使用
待更新
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 偏執の尐儍苽!
评论