基础
1、注释和语句块
注释 # , // , / */
语句块 {}
2、变量
$标识符,作为申明/引用变量
命名规则:'_'或者字母开头可以包含汉字数字
赋值方式
$b=$a=8 连续赋值 自右而左
"=" 值传递,$b=$a 实际上位b开辟内存空间,将a存放的值复制一份过去给b
"=&" 址/引用传递,$b与$a共享一个数据存储空间
可变变量
$a = 'xx'
$b = 'a'
echo $$b
结果:xx
预定义变量
$GLOBALS:global全局变量,是一个包含了所有全局变量的组合数组,全局变量的名称就是该组合数组的键。
$_GET:HTTP GET 变量,通过 URL 参数传递给当前脚本的变量的数组。
$_POST:HTTP POST 变量,通过 HTTP POST 方式传递给当前脚本的变量的数组。
$_COOKIE:HTTP Cookies 变量,通过 HTTP Cookies 方式传递给当前脚本的变量的数组。
$_SESSION:session 变量,当前脚本可用的 SESSION 变量的数组。
$_REQUEST:HTTP Request 变量,默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。
$_FILES:HTTP 文件上传变量,通过 HTTP POST 方式上传到当前脚本的项目的数组。
$_SERVER:服务器信息变量,包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。
这个数组中的项目由 Web 服务器创建。
$_ENV:环境变量,通过环境方式传递给当前脚本的变量的数组
3、常量
常量定义 define($p,3.14[,true/false(是否大小写敏感)]);
系统常量/预定义常量
LINE :返回文件中的当前行号。也可写成line。
FILE:返回当前文件的绝对路径(包含文件名)。
DIR:返回当前文件的绝对路径(不包含文件名),等价于 dirname(FILE)。
FUNCTION:返回当前函数(或方法)的名称。
CLASS:返回当前的类名(包括该类的作用区域或命名空间)。
TRAIT:返回当前的trait名称(包括该trait的作用区域或命名空间)。
METHOD:返回当前的方法名(包括类名)。
NAMESPACE:返回当前文件的命名空间的名称
PHP_VERSION:返回PHP的版本。
PHP_OS:返回执行PHP解释器的操作系统名称。
PHP_EOL:系统换行符,Windows是(\r\n),Linux是(\n),MAC是(\r)
M_PI:返回圆周率π的值
常量取值 直接使用常量值如 $p / constant($p)
判断常量是否已定义 bool defined($var/string constants_name)
4、数据类型
<主要三种类型:标量数据类型、复合数据类型、特殊数据类型>
标量数据类型:
布尔
整型
浮点
字符串型
复合数据类型:
数组
定义数组:$arr=array(0=1,1=>2,'hi'=>'hello')
可以使用下标 和 key来取值 $arr['hi'] , $arr[0]
对象
特殊数据:
资源类型
NULL类型 未被赋值/被unset($var_name)
<数据类型转换>
自动转换:
$a='adf'
$c = $a 6
结果 0 字符串自动转换成0
强制转换:
(int)'df';
(str)$a;
以val结尾的函数(带有截取含义)
intval($a)
strval($b)
floatval('123.23adf')...
使用settpye()函数
settpye($int,'boolean')
5、运算符
$a = 1 $b='1';
全等 === false
等于 == true
不等于 <> != false
非全等 !== true
逻辑与 AND &&
逻辑非 NOT !
逻辑或 OR ||
逻辑异或 Xor
连接字符串
'.'符号 相当于java中的'+'
'+='符号 相当于java中的"+="
#单引号 '$a' 输出$a
错误输出控制符 '@'
输出与输出运算符
print / echo
<?= >
<?= 'str'>输出str
流程控制
1、foreach
foreach($names as $key=>$value)
2、exit语句
exit('出错信息');
终止PHP程序 之后的代码不会执行
函数
参数
值传递
引用传递
默认参数 在函数参数列表末端 指定默认值为''或者0
变量函数
function a($a , $b) return $a+$b;
function b($a,$b) return $a- $b;
$result = "a";
$result = "b"
$result(2,3); 调用b()函数
全局变量、局部变量、静态变量
全局变量:作用域 整个PHP文件,使用global关键字声明,或者通过全局数组$globals访问
局部变量:函数内部变量,作用域函数体
静态变量:声明变量前面加static 函数执行完保留该变量值 不会被释放
数组
创建
一维数组:$arr[key]= value / $arr[] = value;实际中数据长度可能改变
array()函数 $str = array('a'=>'any','b'=>'bead','b'=>'bed') / array('and','as')
二维数组:$arr[1] = array('a'=>'sdf','玩的'=>'sdf')
$arr = array( 'arr1'=>array('00'=>'dd'),'arr2'=>array('314'=>'c','位'=>'地方') )
创建数组函数
range(int low, int high,[step]) 指定从low- high步长位step的数组
array_combine(array keys ,array values) 建立关联数组 keys=>values
array_fill(int star_index,int number,mixed value) 从start_index位置填充number个value
array_pad(array arr,int pad_size , mixed value) 填补数组 pad_size为正填补到右边,反之左边
explode(string separator,string str,[int limit]) 返回分割数组,如果分隔符"",则返回false
遍历和输出
foreach遍历 可遍历二维
list()与each();list算是一种数据结构,从数组中获取键值,each是从当前索引遍历数组list($key,$value) = each($arr)
输出数组:print_r() / var_dump();
统计函数:
count(arr,[int mode]) mode设置位1/COUNT_RECURSIVE递归统计数组元素个数,默认为0
max(arr1,[arr...])返回[多个]数组中最大值
min(arr1,[arr...])返回[多个]数组中最小值
array_sum(arr) 统计数组元素数字和
array_count_values(arr) 统计arr中个元素出现的次数,作为新数组返回
数组指针函数
key(arr) 返回arr中当前指针(默认是第一个元素位置)的key
current(arr) 返回arr中当前指针(默认是第一个元素位置)的value,超出返回false
prev(arr) 指针向前移动一位,返回该索引值
next(arr) 指针向后移动一位,返回该索引值
reset(arr) 指针移动到第一位,返回数组第一个元素
end(arr) 指针移动到最后一位,返回最后一位的值
数组和变量之间的转换
extract(arr) 变量名位键名,变量值为对应元素值
compact(string varname...) 将变量组合为数组,与extract()反之
数组检索函数
array_keys(arr,[search value]) [指定搜索value]返回arr的所有键名数组,使用数字索引
array_values(arr) 返回arr所有的值并建立数字索引
bool in_array(mixed needle,arr,[bool strict]) 检索是否包含needle值,strict为true则判定类型是否相同
mixed array_search(mixed needle,arr,[bool strict]) 返回值为needle的键,strict为true则判定类型是否相同
bool array_key_exists(mixed key,arr) arr所有键中是否有指定的key
array array_unique(arr) 先对值排序 删除重复的值和键 保留重复值中第一个键值
数组排序函数
元素值排序
bool natsort((array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 自然升序排序,保留原有键值对
bool natcasesort(array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 不区分大小写自然升序排序,保留原有键值对
bool shuffle(array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 随机排序,排序后重新赋予整数键名
bool sort(array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING])升序排序,排序后重新赋予整数键名
bool rsort(array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 降序排序,排序后重新赋予整数键名
bool asort(array %arr, int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 升序排序,保留原有键值对
bool arsort(array %arr, int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 降序排序,保留原有键值对
array array_reverse(array arr, [bool pre_key]) 与原数组反序,pre_key为true,保留原有键值关系
键值排序
bool ksort(array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 升序排序,保留原有键值对
bool krsort(array &arr,int [SORT_NUMBERIC/_REGULAR/_STRING/_LOCALE_STRING]) 降序排序,保留原有键值对
数组与数据结构
array_push(arr,varname...) 向数组末尾添加一个或多个元素
array_pop(arr) 弹出数组最后一个元素,将数组长度减1,如果已为0,则返回null
array_shift(arr) 删除数组的第一个元素,并返回该元素
array_unshift(arr,varname...) 向数组开头添加一个或多个元素
数组集合函数
并集
array array_merge(array arr...) 合并多个数组,相同(非数字)键名,后面的值将覆盖前面的值
差集
array array_diff(array arr1,array others...) 返回所有在arr1中不在others中的元素,键名保留
array array_diff_assoc(array arr1,array others...) 返回所有在arr1中不在others中的键值对(值+键名)
array array_diff_key(array arr1,array others...) 返回所有在arr1中不在others中的键名
交集
array array_intersect(array arr1,array others...) 返回所有在arr1中 同时也在others中的元素,键名保留
array array_intersect_assoc(array arr1,array others...) 返回所有在arr1中 同时也在others中的键值对(值+键名)
array array_intersect_key(array arr1,array others...) 返回所有在arr1中 同时也在others中的键名
字符串操作
定义
单双引号,单引号 '$所见即所得' 不转化变量;
定界符+自定义标识 <<<GOD ... GOD; / <<<TTT ... TTT Heredoc结构类型 其中不允许添加注释
自动转义、还原字符串函数
addslashes(string str) 需转义的添加 \ NULL变为0
stripslashes(str) 还原转义的字符串
字符串长度
int strlen(str) 汉子占两个字符 在UTF-8编码下 汉子占3个字符
截取字符串
string substr(str,int start,[int lenght]) start为-1是最后一个 -2是倒数第二个 截取长度可选
string mb_substr(str ,start,[int lenght,string encoding]) 指定字符编码对字符串截取,避免出现乱码
比较字符串
int[0 1 -1] strcmp(str1,str2) 相等为0
int[0 1 -1] strcasecmp(str1,str2)不区分大小写
int[0 1 -1] strnatcmp(str1,str2) 自然顺序比较字符串
int[0 1 -1] strnatcasecmp(str1,str2) 不区分大小写自然顺序比较字符串
int[0 1 -1] strncmp(str1,str2,int length) 比较前n个字符串
检索字符串
string strstr(str,string needle) 返回needle第一次出现的位置至str最后位置的字符串
string stristr(str,string needle) 不区分大小写
int substr_count(str,needle) 字符串出现的次数
替换字符串
mixed str_replace(mixed search,mixed replace,mixed subject,[int &count]) subject指定查找范围 count获取可替换的数量
mixed str_ireplace(mixed search,mixed replace,mixed subject,[int &count]) 不区分大小写
string substr_replace(str,string needle,int start,[int length]) 从start位置查找替换
去空格和特殊字符
string ltrim(str,[string charlist]) 去掉左边的空格和特殊字符
string rtrim(str,[string charlist]) \0 \t \n \xOB \r " "
string trim(str,[string charlist]) 去掉两端的空格和特殊字符
格式化字符串
string number_format(float num,[int num_decimal,string dec_separator,string thousands_separator])
分割合成字符串
array explode(string separator,str,[int limit])
string implode(string glue,array pieces) 合成字符串
字符串与HTML转换
string htmlentities(str,[int quote_style,string charset]) 转换成html字符串不被html解析
quote_style :ENT_COMPAT转换双引号忽略单引号 默认值 ENT_NOQUOTES都忽略 ENT_QUOTES 单双引号都转换
其他字符串函数
string strrev(str) 将英文字符串str颠倒过来
string str_repeat(str,int times) str重复times次
string mb_convert_encoding(str,string to_encoding,[mixed from_encoding]) 转换字符串编码
PHP文件引用
将源文件包含到当前文件中使用
include语句 void include(string filename) 执行到时候才去获取源文件,如果引用文件没找到 会输出警告继续往下执行
require语句 void require(string filename) 包含源文件 组成新的php文件,执行时立刻调用源文件,如果没找到输出错误终止脚本
include_once void include_once(string filename) 只引用一次
require_once void require_once(string filename) 只第一次被引用的文件被执行
面向对象
类的声明:
public/protected/private class Test{
public $aa;
static $cc ="0";
var $bb; //不需要特殊意义的声明方式
const PI=3.14159; //::域作用符,使用时Test::PI
[public] function TestAA(){}
//可以定义构造方法 类似于java
//$this使用
public getAa(){
return $this->aa;
}
static function TestCc(){}
}
构造方法
PHP中一个类 只能声明一个构造方法,5以前构造方法名和类名一致,5后__construct(){};
析构方法
PHP中也有"垃圾回收"机制,在对象销毁前执行的方法,无参方法__destruct(){}
类的实例化
$变量名 = new 类名([参数])
访问类的成员
$test = new Test();
$test ->aa ='aaui';
$test->TestAA();
访问类的静态变量和静态方法
Test::$cc
Test::Testcc();
类的封装
关键字public protected private
类的继承
在子类中使用域操作符::
parent::成员/方法/常量
self::当前类中静态成员、常量
子类方法重写,覆盖父类中的方法
类的多态
接口和抽象类和java一样
其他关键字
final 类似与java中final
clone
$test2 = clone $test 方法和属性与test完全一样
instanceof 与java中的一样
常用方法
_set()和_get() 修改和获取私有成员
_isset()和_unset() 检测是否有该私有变量 和删除私有变量
_call() 当调用不存在的成员方法时,会调用call方法
_call($method,$parameters)
_toString()
_autoload() 自动加载类
操作MySQL数据库
连接:mysqli mysqli_connect(string server,string username,string pwd,string dbname,int port,string socket)
选择数据库: bool mysql_select_db(mysqli link,string dbname)
执行sql语句: mixed mysqli_query(mysqli link,string statement,[int resultmode])
结果集(类似于数组的数据结构)
将结果集返回数组中: array mysqli_fetch_array(resource result,int result_type)
从结果集中获取一行作为对象: mixed mysqli_fetch_object(resource result)
从结果集中获取一行作为枚举数组: mixed mysqli_fetch_row(resource result)
从结果集中获取一行作为关联数组: mixed mysqli_fetch_assoc(resource result)
获取结果集中的记录数: int mysqli_num_rows(resource result)
释放内存
void mysqli_free_result(resource result)
关闭连接
bool mysqli_close(mysqli link)
PHP与Web交互
$_POST[]全局变量,获取post表单数据
$_GET[]全局变量,获取method= 'get'表单数据
在表单action属性提交的页面可以 调用$_POST[]获取属性值 茹$_POST['username']
$_FILES全局变量 是一个文件数组 $_FILES['filename']['name']..
is_uploaded_file(string filename)
move_uploaded_file(string filename,string destination)
服务端获取数据的其他方法
$_REQUEST[]全局变量 可以获取get方法、post方法、HTTP cookie的脚本信息,茹$_REQUEST['user']
$_SERVER[]全局变量 获取服务器相关信息 和请求方法
PHP会话控制
SESSION
启动session:bool session_start(void)
启动后 session会被保存在 $_SESSION[]中
session_start(); $_SESSION['NAME']=NULL;