面试的时候发现自己有时候连最基础的知识都不能准确的回答,甚是可悲,万丈高楼平地起!
1-语法规范
行位单位、所以每行要用分号结束
变量严格区分大小写,函数名、方法名、类名不区分大小写
2-标签4种
xml风格<?php ?>
script风格
短格式 echo 'php'; ?>
sap格式
3-注释
双引号
单引号
注意:双引号不能与单引号错位
4-变量
1-变量的定义
变量就是内存中用于临时存储数据的一个内存空间,每一个空间都有一个名子,这个名子就是变量名,变量名的作用是用于引用,通过变量名对变更的操作就是对内存的对应的空间都读写。
语法:$变量名=值;
变量名必须是字符数字下划线开头
必须以 $ 开头
变量名严格区分大小写
2.-可变变量
A变量值是另一个变量的名,就可以在A变量名前加两个$读取另一个变量的值。
$a = 'b';
$b = 'c';
$$a = 'c';
3-预定义变量 (9种、$_、$GLOBALS)
$_GET 用于接收从前台以get方式传递过来的数据
$_POST 用于接收从前台以post方式传递过来的数据
$_REQUEST 包含get与post方式传递的数据
$_SERVER 记录了客户端与服务器端的相关信息
$_COOKIE 主要用于记录php会话技术中的保存在客户端的数据
$_SESSION 主要用于记录php会话技术中的保存在服务器端的数据7.
$GLOBALS 主要用于记录全局变量
$_FILES 主要保存用户上传的文件的信息
$_ENV 主要用于保存php的环境变量
6-变量的删除
unset(变量名);内存中没有
变量名 = null;(变量的值是null,还存在于变量中)
7-常量
常量就是一类特殊的变量,常量也是存储数据的,但是常量一旦定义就不允许更改值,常量本身也不能删除。
常量的定义
define('常量名',值);
const 常量名 = 值;
区别:
const可以定义类的内部和外部
define只能定义类的内部
define的第三个参数区别大小写 true
const的值读取:constant()
8-魔术常量(6种、__开头)
__FILE__ 当前脚本文件的完整路径名
__LINE__ 当前行号
__DIR__ 当前文件的所在的目录
__FUNCTION__ 获取当前所在的函数名
__METHOD__ 获取当前所在的方法名。形式 类名::方法名
__CLASS___ 获取当前所在的类名
9-数据类型
==三大类型:(4+2+2)==
标量数据类型(int、float、string、bool)
复合数据类型 (array、object)
特殊数据类型(resource、null)
一. 标量数据类型
int
float
string
使用单引号定义的字符串能被转义的字符有\’转义成` \\转义成\
单引号中的变量不能被解释为变量的值
使用双引号定义的字符串能被转义的字符有\” \ \$ \t \n
双引号中的变量能被解释为变量的值
双引号中的变量有时需使用”{}”括起来,来限定变量
php中的转义符()\' 单引号
\" 双引号
\t tab表(制表符)
\n 换行
\r 回车
\\ \
\$ $
定界符 heredoc 、nowdoc
//heredoc
$a = 100;
$str =<<
sadsad,$a,sad
abc;
echo $str;
//nowdoc
$a =100;
$str = <<
这里可以是任合内容
我是历的苛夺基$a
本原则叶落归根在运
输费艰难田¥¥&……
AAA;
echo $str;
Boolean
10-复合数据类型
数组
==索引数组== 下标是整数
==关联数组== 下标是字符
object
对象
11-特殊数据类型
resource
null
12-数据类型的转换
其他数据类型转为整型
其他数据类型转为字符串
其他数据类型转为布尔型
所有0、“”、“0”、null、array()转布尔都为false
13-变量与常量的内存理解
1、内存分区
栈区 cpu
堆区 存储复合类型的值
数据段 简单的值,细分全局区(全局变量、局部变量)和静态区(常量、类常量、静态变量)
代码区 (存代码)
14-执行过程
编译
执行
输出
15-函数判断
is_int() 判断是否为整型
is_bool() 判断是否为布尔类型
is_array() 判断是否为数组
is_null(); 判断是否为null
is_object() 判断是否为对象
is_string() 判断是否为字符串
is_scalar(); 判断是否为标量数据类型
empty();
判断一个变量是否为“空”,只要是能够转换为布尔false都是所谓的“空”,返回布尔true。0、0.0、””、’0’、false、null、空数组
isset();
null的时候是false
主要用于判断是否设置值,如果是null值才返回false
is_null();
只有是null才为true
主要用于判断一个变量的值是否为null
16-PHP的输出语句
echo
print_r()
var_dump()
sprint_f()
十四、运算符
值得注意的是,很多人搞不清楚前自增和后自增的区别,
前自增
运行规则:先对变量的值进行加1,再使用变量的值进行运算
后自增
运行规则:先使用变量的值进行运算,再对变量的值进行加1
提示:
无论前自增还是后自增,变量的值都会加1,唯独受影响的是整个式的结果
算术运算符
前自增
后自增
前自减
后自减
字符串运算符
.
.=
比较运算符
>、=、<=、!=、==、===、!==
提示:
布尔false
等效false的值(0、0.0、””、’0’、null、空数组)
如果要严格区分等效于false的其他数据类型值与真的布尔值false,那么请求===
逻辑运算符
&&、||、!、and、or
逻辑与短路:有一个为true返回true
逻辑或短路:有一个为false返回false
and、or 与 &&、||区别:
and、or的运算优先级低于=
&&、||的运算优先级高于=
位运算符
十五、流程控制
一、 分支结构
//单分支
if(exp){
//your code
}
//双分支
if(exp){
//your code
}else{
//default code
}
//多分支
if(expA){
//codeA
}else if(expB){
//codeB
}else if(expC){
//codeC
}else{
//default code
}
switch分支
语法:
switch(变量){
case 值1:
//语句体1
break;
case 值2:
//语句体2
break;
default:
//缺省语句体
}
php中switch的比较属于==比较,js中switch的比较属于===
二、 循环控制
for循环
for($i=0;$i<10;$i++){
}
foreach循环
语法1:
foreach(数组 as $v){
//循环体
}
语法2:
foreach(数组 as $k=>$v){
//循环体
}
while循环
while(exp){
//循环体
}
do…while循环
do{
//循环体
}while(exp)
一、数组 count($arr)
元素
下标
个数
二、数组的相关操作
定义:array()、[]
追加
删除 usnet();
三、数组的遍历
下标连续的
for($i = 0 ;$i
}
下标不连续
foreach(数组 as $k => $v){
//循环体
}
三、数组的分类
索引数组-下标是整数
关联数组-下标是字符串
混合数组
四、关联数组的遍历
==怎么把关联二维数组转换成一维数组==
public function test1(){
$user = array(
'id'=>1,
'name'=>'zhangsan',
'age'=>19
);
$arr = '';
foreach ($user as $key=>$value ){
$arr .= $value;
}
dump($arr);die;
}
public function test2(){
$arr = [];
$arr[] = 'zhsangsan';
$arr[] = '19';
$arr[] = '1';
dump($arr);die;
}
五、函数
函数的定义
function funName(形参列表){
//函数体
【return 值】;
}
形参
形参主要用于接收从函数外部传递进来的数据
形参只对内部可见
形参可以具有默认值,如果在调用时没有为具有默认值的形参传递数据,那么在函数内部使用的形参的默认值,否则使用传递进来的数据。
具有默认值的形参一般位于形参列表的最后。
形参的作用是让函数更性有通用性
实参
用于向函数内部传递值
匿名函数
$showInfo =function(){
}
六、静态变量
==在函数内部使用static定义的变量就是静态变量==
静态变量的特性
静态变量只会被初始化一次
静态变量的值不会随着函数的调用而销毁,仍然在内存,但是不能在函数外部访问。
静态变量在其后函数调用时还可以访问,并且保留上一次函数运行时的结果
==项目中积分的使用问题==
七、传值方式
赋值传真
将变量A的值传递到变量B
引用传值
将变量A的内存地址传递到变量B
&地址符
用于将赋值传值更改为引用传值。
函数的实参地址的传递
函数的实参与形参的传值是赋值传值
如果想实现函数实参与形参的引用传值,形参前面加&
八、作用域
外部作用域
在任何函数外部定义的变量就是全局变量,其作用域就是全局作用域
内部作用域
在函数内部定义的变量就是局部变量,其作用域就是局部作用域
全局作用域
global关键字
函数内部访问函数外部的变量
不受作用域限制
常量、
预定义的变量:
$_GET
$_POST
$_REQUEST
$_SERVER
$_SESSION
$_COOKIE
$_ENV
$_FILES
$GLOBALS
一、PHP文件引入
require
在引入的文件发生错误(不存在),会直接结束当前循环的执行。
inlcude
在引入的文件发生错误(不存在),会继续其后的代码执行。
require_once\include_once
在引入文件时会先检查被引入的文件之前是否有引入过,如果没有则引入,有就不引入
说明:一般引入的代码有逻辑性的,使用require,include一般用来引入HTML
二、针对调用的函数引入问题
同一个脚本内可以先调用函数后定义函数
原理:先编译,编译后代码区就有了函数的定义代码,后再调用,正常
先调用,后引入,报错(原因是引入的文件是先引入后调用,执行调用时文件还没有定义,所以会报错)
三、PHP常用字符串
==strlen== 字符串的长度
$string = 'http://www.doc.com/index.php/Home/Test/strlen';
echo (strlen($string));
==strchr== 查找search字符串首次出现的位置并截取到最后
strchr($string,'w')
==strrchr== 查找search字符串末次出现的位置并截取到最后
strchr($string,'i')
==strpos== 在str字符串中查询search字符串首次出现的位置(0开始算起)
echo (strpos($string,'w'));
==strrpos== 在str字符串中查询search字符串最后一次出现的位置
echo (strpos($string,'w'));
stripos、strripos i表示不区分大小写的查询
==trim==
①:trim(str【,substr】) 用于在str字符串两端去除指定的substr字符,如果省略substr,则是去除空格
$string = " zhangsan ";
echo(trim($string));
$string1 = '22zhangsan22';
echo '
';
echo (trim($string1,'22'));
②:ltrim(str【,substr】) 去除左侧指定的字符或空格
$string2 = '22zhangsan';
echo (ltrim($string2,22));
③:rtrim(str【,substr】) 去除右侧指定的字符或空格
$string2 = 'zhangsan22';
echo (rtrim($string2,22));
==str_repeat(str,n)==
$string2 = 'nice';
echo (str_repeat($string2,3));
==ucfirst、ucwords== 首写单词大写,一句话首单词大写
$string2 = 'nice';
echo (ucfirst($string2));
$string2 = 'nice aweqwe dqwe';
echo (ucwords($string2));
==strtolower、strtoupper== 转换大小写
==explode(sep,str)== 将字符串str,使用sep分隔符进行分割,并以数组的形式返回
$str = "people became quite illogical when they decide";
var_dump(explode(' ',$str));
==md5( )== 加密,返回32位字符串
==addslashes()==
对于些特殊字符添加反斜杠(\),特殊字符(‘)(“)(\)
==stripslashes( )==
addslashes的逆运算,去除反斜杠
==htmlspecialchars== 将html语言中的标签转换成对应的字符实体。
==htmlspecialchars_decode== 逆运算
==chr、ord==
ord主要用于获取字符的unicode编码 97
chr主要用于获取指定编码对应的字符 b
四、数学函数
max() 获取多个变量或数组中的最大值
min() 获取多个变量或数组中的最小值
abs() 获取绝对值
ceil() 向上取整
floor() 向下取整
rand(m,n) 获取m与n之间的随机整数
mt_rand(m,n); 推荐,获取m与n之间的随机整数
round(v【,p】); 对变量v保留p位小数(四舍五入),如果省略p表示直接取整
pow(m,n); 取m的n次方
sqrt(v); 开平方
五、数组函数
count() 数组长度
array_keys($arr); 以数组形式返回key值
array_values($arr); 以数组形式返回value值
in_array($value); 判断数组$arr中存是否有$value值存在
array_key_exists($key,$arr); 判断数组$arr中存是否有$key键名存在
数组添加与删除
array_pop(); 从尾部删除一个元素
array_push(); 向数组的尾部追加一个元素
array_shift(); 从头部删除一个元素
array_unshift(); 向数组的部部追加一个元素
array_splice(); 从数组的中间删除指定个数的元素,并以新的元素代替
list结构
list(变量列表)= 数组
将数组中的元素的值,依次赋值给list后的变量,要求数组是一个索引数组
数组排序
sort(arr); 对数组进行升序排序
rsort($arr); 对数组进行降序排序
数组合并
array_merge(arrA, arrA, arrA,….);
数组指针相关的函数
each(); 用于获取当前数组指针所指向的元素,并返回一个混合数组,==并将指针下移==。
key(); 用于获取当前数组指针所指向元素键名
current(); 用于获取当前数组指针所指向元素的键值
next(); 将指针下移
prev(); 将指针上移
end(); 将指针指向最后一个元素
reset(); 重置指针(回到第一个元素)
$arr =[
'id'=>2,
'brand' => 'apple',
'price'=> 16
];
//用于获取当前数组指针所指向的元素,并返回一个混合数组,并将指针下移。
var_dump(each($arr));
var_dump(key($arr)) ;
var_dump(current($arr)) ;
var_dump(next($arr)) ;
var_dump(prev($arr)) ;
var_dump(end($arr)) ;
var_dump(reset($arr)) ;
输出结果
array(4) {
[1]=>
int(2)
["value"]=>
int(2)
[0]=>
string(2) "id"
["key"]=>
string(2) "id"
}
string(5) "brand"
string(5) "apple"
int(16)
string(5) "apple"
int(16)
int(2)
示例2:使用each遍历数组
$arr =[
'id'=>2,
'brand' => 'apple',
'price'=> 16
];
while($data = each($arr)){
echo $data['value'],'
';
}
本作品采用《CC 协议》,转载必须注明作者和本文链接