安装 |
MAMP |
|
变量与运算符 |
php标签 |
<?php ... ?> |
● 在文件最后的 ?> 通常省略, 避免bug
● 输出文字
<?= 字符串; ?>
// 相当于
<?php echo 字符串; ?>
|
在html里插入php |
● 文件名后缀为php
|
|
声明的分隔与注释 |
分隔符 |
;
|
除了自定义的变量与常量都不区分大小写 |
|
注释 |
|
|
|
|
变量与常量 |
变量 |
声明 |
无需声明, 带上 $ 即可
|
系统定义的变量
|
$_ 开头的是超级全局变量
$GLOBALS |
全局可用的所有变量的指针 |
$_SERVER |
服务器环境和运行环境 |
$_GET |
HTTP GET变量 |
$_POST |
HTTP POST变量 |
$_FILES |
HTTP上传文件变量 |
$_REQUEST |
HTTP请求变量 |
$_SESSION |
session变量 |
$_ENV |
环境变量 |
$_COOKIE |
HTTP cookie |
$php_errormsg |
最近的错误信息 |
$HTTP_RAW_POST_DATA |
原生post数据 |
$argc |
传入脚本的参数数量 |
$argv |
传入脚本的参数数组 |
|
|
常量 |
声明 |
关键词 const
|
注意 |
习惯上常量所有字母都大写 |
已定义的常量 |
核心模块变量 |
PHP_VERSION_ID |
运行中的php版本, 整数值 |
PHP_EOL |
现在OS的换行文字 |
PHP_INI_MAX |
整数最大值 |
PHP_INT_MIN |
整数最小值 |
PHP_OS |
现在的OS |
TRUE |
true |
FALSE |
false |
NULL |
null |
E_ERROR |
重大的运行错误 |
E_PARSE |
编译器的解析错误 |
|
逻辑变量 |
__LINE__ |
现在的行号 |
__FILE__ |
文件的绝对路径与文件名 |
__DIR__ |
当前文件所在文件夹 |
__FUNCTION__ |
现在的函数名 |
__CLASS__ |
现在的类名
# TODO: check here p42
|
__TRAIT__ |
跟踪名 |
__METHOD__ |
类的方法名 |
__NAMESPACE__ |
现在的命名空间的名称 |
|
|
|
|
展示字符串或变量 |
都输出到html里
输出多个值 |
例
echo 'sample'; //=> sample
echo 'a', 'b', 'c'; //=> abc
● 只有一个变量时可以带括号
echo('sample'); // => sample
|
输出一个值 |
● 连结多个值, 用 .
$sample="b";
print("a".$sample); // => ab
|
debug用 |
# TODO: finish here p44
● 要想带换行, 放入 <pre>...</pre> 标签
http://www.w3school.com.cn/tags/tag_pre.asp
|
|
|
|
运算符 |
代入运算符 |
|
复合代入运算符 |
|
算术运算符 |
+, - , *, /, %, **(指数)
|
递加递减 |
++, --
$a++ // 先评价式子最后递加
++$a // 先递加再评价式子
● 对字符串递加递减
认定成数字的作为数字, 认定成字母的按字母顺序
|
字符串连结运算符 |
.
例
"hello "."world"; //=>hello world
● 对数字使用则自动转为字符串
● 带有数字时 . 两侧放上空格
|
比较运算符 |
>, < |
常识 |
>=, <= |
常识 |
==, != |
常识 |
=== |
两侧类型相同 且 值相等 |
!== |
两侧类型不同 或 值不相等 |
|
|
|
php7新增 |
<=> |
a>b时为正, a=b时为0, a<b时为负
(相当于a-b)
|
?? |
a为null则用b的值, 否则用$a
● 连用
|
|
逻辑运算符 |
|
三项运算符 |
|
位运算符 |
<<, >> |
移位 |
& |
都是1则1, 否则0
|
| |
有1则1, 否则0
|
^ |
两个相反则为1
|
~ |
0, 1对调
|
|
|
|
转换运算符 |
php不验证类型, 根于式子自动转换。故一般不需要
(int)
(integer)
|
转换为整数 |
(bool)
(boolean)
|
转换为布尔值 |
(float)
(double)
(real)
|
转换为浮点数 |
(string) |
转换为字符串 |
(array) |
转换为数组 |
(object) |
转换为object |
(unset) |
转换为null |
|
类型运算符 |
如果是指定类的实例则返回true, 否则返回false
例
|
|
条件与循环 |
if |
● 标准写法
if(c1) {
...
} else if (c2) {
...
} else if (c3) {
...
} else {
...
}
● 不带括号写法
if (c1):
...
elseif (c2):
...
else
...
endif;
|
switch |
● 标准写法
switch(式子) {
case v1:
...
break;
case v2:
...
break;
...
default: // 可省略
...
break;
}
● 不带括号写法
switch(式子):
case v1:
...
break;
case v2:
...
break;
...
default: // 可省略
...
break;
endswitch;
|
while |
● 标准写法
● 不带括号写法
|
do-while |
● 标准写法
● 不带括号写法
不存在
|
for |
● 标准写法
for(初期条件; 条件式; 计数器更新方式) {
...
}
● 不带括号写法
for(初期条件; 条件式; 计数器更新方式):
...
endfor
|
break |
|
continue |
|
函数 |
常用的数学函数 |
abs(数值) |
返回绝对值 |
ceil(数值) |
大于参数的最小整数 |
floor(数值) |
小于参数的最大整数 |
max(n1, n2, ...) |
获取最大值, string则为字母顺序
|
min(n1, n2, ...) |
获取最小值, string则为字母顺序 |
sqrt(数值) |
平方根 |
pow(a, b) |
a的b次方
相当于
|
mt_rand() |
返回一个0~mt_getrandmax()之间的随机数 |
mt_rand(min, max) |
返回一个min~max之间的随机数 |
pi() |
圆周率π |
sin(n) |
|
cos(n) |
|
tan(n) |
|
is_nan(n) |
n是不是数值 |
|
自定义函数 |
# TODO: 整理此处的内容
函数定义 |
和js一样会提前提取函数声明, 故没有顺序
function 函数名(a1, a2, ...) {
...
return ...;
}
|
参数的省略与初始值 |
注: 带初始值的参数后面的参数都要带初始值
function 函数名(a1, a2, ..., ar1=..., ar2=..., ...) {
...
}
|
动态长度参数 |
参数名前带 ... , 此参数及后面的作为数组传入此
function 函数名(a1, a2, ..., ...b) {
...
}
● 获取参数信息
func_get_args() |
获取参数的数组 |
func_num_args() |
获取参数的个数 |
func_get_arg() |
获取指定的参数 |
|
指定参数和返回值的类型 |
function 函数名(类型 参数1, 类型 参数2, ...):返回值的类型 {
...
}
● 可以指定的类型
array |
数组 |
callable |
回调函数 |
bool |
布尔值 |
float |
浮点数(float, double, real) |
int |
整数 |
string |
字符串 |
类名/接口名 |
指定的类的实例 |
self |
实例自身 |
● 可以省略返回值类型, 也可以参数里混搭不指定类型的
|
传值与传指针 |
传指针的可以改变自身
例
function sample($a, &$b) {...}
|
函数指针 |
函数名的字符串
确认是否存在此函数, 用 function_exist()
|
无名函数 |
function (...) use(...) {
...
}
● 用use来声明使用的外部变量
● use内的值在函数定义时确定, 不论外部怎么变use里都不变
|
|
变量的有效域 |
变量的有效域 |
所在的代码块 |
内部使用全局变量 |
例
"this is global";
function sample(int $a, float $b, $c):bool {
global $a;
echo $a;
return "sa";
}
|
静态变量 |
|
动态生成变量 |
双重$, 用指定变量的值来命名变量名
例
$color = "red";
$$color = 1; // => $red = 1
|
|
字符串 |
|
|
|
|
|
|
|
|
数组 |
|
|
|
|
|
|
|
|
面向对象 |
类的定义 |
类定义 |
class 类名 {
// properties
public const 常量 = ...;
public 变量 = ...;
// methods
public function 方法名(...) {
...
}
}
● 属性的初始值必须是值, 不能是式子
public $name = "a"."b"; // 不能这样
|
生成实例 |
生成实例 |
|
获取属性, 呼出方法 |
$sample = new Sample();
$sample->$property;
$sample->method();
|
|
$this |
类方法内部获取类的属性
public function test() {
$a = $this.$b;
...
}
● 不带this的话只寻找本地属性, 故会报错
|
构造函数 |
function __construct(...) {
...
}
|
类文件与读取文件 |
include(path) |
遇到读取错误也会继续进行下去 |
include_once(path) |
且只读一次 |
require(path) |
遇到读取错误会抛出错误 |
require_once(path) |
且只读一次
实际都用这个
|
|
静态变量, 静态方法 |
声明 |
public static $version = "1.0.1";
public static function check_version(...) {...}
|
接入 |
自身类与实例处 |
例
self::$version;
self::check_version(self::$version);
|
其他类呼出 |
|
|
|
|
|
范围修饰符 |
public |
我的战车随时出发 |
protected |
此类和子类才能读写 |
private |
只有此类内部才能读写 |
|
|
|
|
类的继承 |
类继承 |
class 子类 extends 父类 {
...
}
|
构造函数 |
父类的构造函数 parent::__construct(...)
function __construct(...) {
parent::__construct(...);
...
}
|
重载 |
直接重新定义原来的函数即可...
|
final |
禁止继承/重载
final class ...
final function ...
|
|
trait |
定义 |
trait 名 {
// properties
// methods
}
|
用法 |
如果是外部文件里的, 要require_one(path)
|
解决命名冲突 |
insteadof
# TODO 查查这里
|
给方法增加名称 |
as
use aT, bT {
aT::hello as at_hello;
bT::hello as bt_hello;
aT::hello insteadof bT
}
|
|
接口 |
接口 |
interface 名 extends 父接口名 {
const 常数=值;
function 函数名(...);
}
|
采用接口 |
class 名 extends 父类 implements n1, n2, ... {
...
}
|
|
抽象类 |
定义 |
abstract class 名 {
abstract function 名(...);
...
// 抽象类内部功能的实现
...
}
|
继承抽象类并实现方法 |
class 名 extends 抽象类名 {
...
function 抽象函数(...) {...}
// 此类自身的功能实现
...
}
|
|
|
|
表单基础 |
|
|
|
|
|
|
|
|
表单例 |
|
|
|
|
|
|
|
|
session |
|
|
|
|
|
|
|
|
文件读写 |
|
|
|
|
|
|
|
|