php命令行执行
php test.php
php交互式环境
php -a
php运行指定代码
php -r "var_dump('hello');"
php内置服务器
php -S localhost:8080
当下列情况转换为 Boolean 时,其值为 FALSE
- 布尔值 FALSE 本身
- 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 "0"
- 不包括任何元素的数组
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
Heredoc
Heredoc 类似与双引号,内部转义字符和变量可以被解析
<<
Nowdoc
Nowdoc 类似于单引号,无法解析转移字符和变量
Heredoc,但是需要在开始标识符加上单引号。
数组
定义数组可以用 array() 或 [] 来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。key 可以是 integer(索引数组)或者 string(关联数组),value 可以是任意类型,如对象、数组。
"superman",
"password" => "12345",
];
var_dump($user);
//二维数组
$data2 = [
"status" => 1,
"data" => $data
];
var_dump($data2);
// 一维数组
$data3 = array("username" => "superman");
var_dump($data3["username"]);
//二维数组
$data4 = array([
"username" => "superman",
"password" => "111111",
]);
var_dump($data4);
var_dump($data4[0]["password"]);
类型转换
变量
预定义变量
$GLOBALS
— 引用全局作用域中可用的全部变量
$_SERVER
— 服务器和执行环境信息
$_GET
— HTTP GET 变量
$_POST
— HTTP POST 变量
$_FILES
— HTTP 文件上传变量
$_REQUEST
— HTTP Request 变量
$_SESSION
— Session 变量
$_ENV
— 环境变量
$_COOKIE
— HTTP Cookies
$php_errormsg
— 前一个错误信息
$HTTP_RAW_POST_DATA
— 原生POST数据
$http_response_header
— HTTP 响应头
以下预定义变量只在命令行执行的时候生效
$argc
— 传递给脚本的参数数目
$argv
— 传递给脚本的参数数组
全局变量和局部变量
常量
PHP 中常量用define()
函数或const
关键字来定义,PHP 还包含一些预定义常量如 __LINE__
、__FILE__
等。
定义常量
魔术常量
__LINE__
,文件中的当前行号。
__FILE__
,文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__
,文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__FUNCTION__
,函数名称,返回该函数被定义时的名字。
__CLASS__
,类的名称,返回该类被定义时的名字。
__TRAIT__
,Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
__METHOD__
,类的方法名,返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__
,当前命名空间的名称(区分大小写)。
运算符
算术运算符包括
-$a
,取反
$a + $b
,加法,a 和 a和b 的和
$a - $b
,减法,a 和 a和b 的差
$a * $b
,乘法,a 和 a和b 的积
$a / $b
,除法,a 和 a和b 的商
$a % $b
,取余,a 除以 a除以b 的余数
$a ** $b
,乘方,a 的 a的b 次方
组合运算符
比较运算符
$a == $b
,如果类型转换后 a 等于 a等于b,返回 TRUE。
$a === $b
,如果 a 等于 a等于b,并且它们的类型也相同,返回 TRUE。
$a != $b
,如果类型转换后 a 不等于 a不等于b,返回 TRUE。
$a <> $b
,等同于 !=
$a !== $b
,如果 a 和 a和b 的值或类型不同,返回 TRUE。
$a < $b
,如果 a 严格小于 a严格小于b,返回 TRUE。
$a > $b
,如果 a 严格大于 a严格大于b,返回 TRUE。
$a <= $b
,如果 a 小于或者等于 a小于或者等于b,返回 TRUE。
$a >= $b
,如果 a 大于或者等于 a大于或者等于b,返回 TRUE。
错误控制运算符
错误控制运算符只对表达式有效。对新手来说一个简单的规则就是:
如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和 include 调用,常量,等等之前。
不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
注意:目前的 @ 错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或者敲错了字母的函数调用前用了 @ 来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。
递增(减)运算符
++$a
,a 的值加一返回 a的值加一返回a。
$a++
,返回 a,然后将 a,然后将a 的值加一。
--$a
,a 的值减一返回 a的值减一返回a。
$a--
,返回 a,然后将 a,然后将a 的值减一
逻辑运算符
$a and $b
,逻辑与,如果 a 和 a和b 都为 TRUE
$a && $b
,逻辑与,如果 a 和 a和b 都为 TRUE,其中 && 优先级高于 and
$a or $b
,逻辑或,如果 a 或 a或b 任一为 TRUE
$a || $b
,逻辑或,如果 a 或 a或b 任一为 TRUE,|| 优先级高于 or
$a xor $b
,逻辑异或,如果 a 或 a或b 任一为 TRUE,但不同时是,则返回 TRUE
! $a
,逻辑非,如果 $a 不为 TRUE
数组运算符
$a + $b
,a 和 a和b 的联合
$a == $b
,a 和 a和b 键和值都相同则为 TRUE
$a === $b
,a 和 a和b 键和值且顺序和类型都相同返回 TRUE
$a != $b
,a 和 a和b 中键或值不同返回 TRUE
$a <> $b
,等同于 !=
$a !== $b
,a 和 a和b 中键,值,顺序或类型,其中一个不相同则返回 TRUE
PHP7 新增操作符
太空船操作符使用 <=> 表示,用于比较两个表达式。当 a 小于、等于或大于 a小于、等于或大于b 时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的
1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点数
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
NULL合并运算符
NULL 合并运算符使用 ?? 表示,意味着如果 ?? 之前的变量存在且值不为 NULL,它就会返回自身的值,否则返回 ?? 后的操作数。
**流程控制
admin
foreach
"superman", "password"=>"111111"];
foreach($data as $item){
echo $item;
}
foreach($data as $key => $val){
echo $key . "---" . $val;
}
switch
PHP 中 4 种包含语句
- include
- include_once
- require
- require_once
include 和 require 都可以加载文件,不同点在于如果加载的文件包含错误,include 发出警告,继续执行后面的语句,而 require 则发出致命错误,终止程序执行。
include_once 和 require_once 的区别同 include 和 require,都是遇到错误时是否继续执行。
include 和 include_once,以及 require 和 require_once 的区别在于是否进行重复检测。
包含文件执行顺序
参数是绝对路径(以 / 开头的路径),则直接包含该文件
参数是相对路径或文件名,按照 include_path (可以通过 phpinfo() 查看当前包含的路径)指定的目录寻找。
如果在 include_path 下没找到该文件则在调用脚本文件所在的目录和当前工作目录下寻找。
如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
函数
对象
PHP 中用 class 来定义类,用 new 来实例化对象,用 extends 继承类,不过只能单继承。属性和方法有 public、private 和 protected 做访问控制,默认为 public,在类里定义常量不需要 $,用(::)范围解析符可以调用父类的方法,访问类的静态变量、静态方法和常量。
username = $username;
$this->password = $password;
}
public function getInfo(){
return $this->username . ',' . $this->password;
}
}
$s = new Student();
$s->setInfo('admin', '111111');
var_dump($s->getInfo());
继承,调用父类方法,调用静态方法
getParentMethod());
$b->execStatic();
//直接调用类的静态方法
B::test();
//直接调用类的静态属性
var_dump(B::$user);
构造函数和析构函数
hello();
访问控制
对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。如果未添加,则默认为 public。
public
所定义的类成员可以在任何地方被访问
protected
所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问)
private
定义的类成员则只能被其所在类访问