PHP----基础知识

基础知识准备

面试

下面将记录一些为面试准备的基础知识,仅做自己参考学习使用~
链接:https://learnku.com/articles/6844/a-php-interview-for-a-16-year-old-graduate
主要内容:
基础知识:字符串操作、数组操作、文件操作、正则操作
进阶知识:面向对象、数据结构和算法、设计模式、mysql 索引、mysql 引擎、mysql 事务、mysql 锁
高阶知识:linux+nginx+mysql+php+redis 优化,只会操作没用,谁都会,高并发、分布式系统、负载均衡、分库分表、消息队列


PHP基础知识


基本语法:

1)引用:变量、函数或者对象等前加&,表示引用,也就是,不同的名字访问同一个变量内容。

function a(&$b){
    $b++;
}
$c=0;
call_user_func_array('a',array(&$c));
echo $c;  //输出 1

关于引用暂时参考如下链接:https://www.cnblogs.com/alsf/p/9621362.html,个人还没有看明白,待续~

2)if else 与switch case的区别:
switch case的效率更高一些,因为只取出变量的值一次,然后将这个值与每个case进行对比,而if else要每次取出变量的值进行比较,所以效率没那么高。
另外,如果多个case的执行语句一样,可以直接写成如下形式:

switch ($a){
    case 1:case2:echo '-------1 2---'.PHP_EOL;break;//记得加上break语句,否则会继续执行下一个case直到遇到break为止
    case 3:case4:echo '-------34---'.PHP_EOL;break;
}
//注意下面的例子,case中的值和原值的类型不一样,字符串会当做0来处理
$a = 'ggg';
switch ($a){
    case 0:echo '---string-----';break;//程序走这种情况
    case 1:case2:echo '-------num---'.PHP_EOL;break;
}

3)PHP取整数函数常用的四种方法:

1.直接取整,舍弃小数,保留整数:intval();
2.四舍五入取整:round();
3.向上取整,有小数就加1:ceil();
4.向下取整:floor()

4)isset和empty函数:均用来判断变量是否存在或者为空,如果判断常量用define函数。
如果判断一个变量是否已声明,则用isset函数;
如果判断一个变量是否赋予数据且补位为空,则可以用empty函数;
如果判断一个变量存在且不为空,则用isset和empty。
具体区别如下:

isset变量不存在变量存在但值为null变量存在且值不为null
返回结果falsefalsetrue

注意:如果同时检查多个变量,每个单项都为true,才返回true,否则结果为false。

empty变量不存在变量存在但值为特殊情况变量存在且值不为特殊情况
返回结果truetruefalse

特殊情况为:值为"",0,‘0’,NULL,FALSE,array(),var $var;以及没有任何属性的对象。


1,字符串操作:
1)在PHP中,有时候会把字符串当做数组使用,因此可以利用和数组类似的方法查找和修改字符串,比如:

$a='abcdef';
echo $a[1]; //查找字符串,运行结果为b
$a[1]='k';
echo $a; //修改字符串,运行结果为'akcdef';

2)计算子串在字符串中出现的次数:
substr( s t r i n g , string, string,substring, s t a r t , start, start,length)

3 ) strcspn( s t r i n g , string, string,charlist, s t a r t , start, start,length);
返回在找到指定的字符之前,在字符串中查找的字符数(包含空格);
strspn( s t i n g , sting, sting,charlist, s t a r t , start, start,length);
返回字符串中包含$charlist参数中指定字符的数目。


2,数组操作
注意:数组不能用new 来实例化,因为new是用来实例化类的,返回的为对象object,而数据的类型为array。
1)数组去重:

array_flip(array_flip($data));//两次反转操作即可,如果存在重复的值,会保留最后一个键值对应的键名
array_unique($array);//如果遇见值相同,取开始的键名
 array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )//如果回掉函数为空,则会过滤掉false或者空或者0的值

按照回掉函数对数组进行过滤操作。
2)函数调用:call_user_func与call_user_func_array的区别:
两个函数均是调用自己定义的函数,但是在传入参数的形式上有所区别,具体如下:
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $… ]] )
mixed call_user_func_array ( callable $callback , array $param_arr )

class World {
 function sayHello($word = '')
 {
  echo $word;
 }
} 
 //注意,必须是要实例化的,除非是static
$world = new World();
call_user_func([$world, 'sayHello'], 'hello world'); 
//输出 hello world

function say($word)
{
 echo $word;
}
call_user_func_array('say', ['hello world']); //注意:第二个参数是数组的形式
//输出
//hello world
class World {
 function sayHello($word = '')
 {
  echo $word;
 }
} 
 //注意,必须是要实例化的,除非是static
$world = new World();
call_user_func_array([$world, 'sayHello'], ['hello world']); //注意:第二个参数是数组形式
//输出 hello world

2)数组切片:array_slice( a r r a y , array, array,start, l e n g t h , length, length,preserve);//$preserve:是否保留原键名,主要针对二维数组

$a = array('a'=>'aa','b'=>'bb','c'=>'cc');
var_dump(array_slice($a,1,2,false)); //输出结果为:array('b'=>'bb','c'=>'cc')
$b = array('a','b','c');
var_dump(array_slice($b,1,2,false));//输出结果为:array(0=>'b',1=>'c')

3)数组对比差集:array_diff( a r r 1 , arr1, arr1,arr2[, a r r 3.... ] ) 返 回 结 果 为 数 组 , 为 所 有 的 在 arr3....]) 返回结果为数组,为所有的在 arr3....])arr1中但是不在其他数组中的值,注意不在其他任何一个数组哦~

$a = array('a0','b0','c0');
$b = array('a0','b1','c0');
$c = array('a1','b1','c1');
var_dump(array_diff($a,$b,$c));//输出结果为array(1=>'b0') 因为a0虽然不在$c中,但是在$b中,c0同样在其他两个数组中的一个,只有b0在任何一个数组中都不存在

注意:如果要对比两个数组的差集,需要做如下的处理:

$diff1 = array_diff($a,$b);
$diff2 = array_diff($b,$a);
$diff = array_merge($diff1,$diff2);
var_dump($diff); //输出结果为array('b0','b1')

3,文件操作

//写入文件
$path='/tmp/hello.txt';
$data = 'hello world!';
//如果文件不存在的话,会创建文件并将data 写入,返回写入的字节数
$numbytes = file_put_contents($path,$data);

//读取内容
$lines = array();
if(file_exists($path)){
    echo '文件大小为:'.filesize($path).PHP_EOL;
    $myfile = fopen($path,'r');//仅仅读取的模式打开,也可以用'r+','w','w+','a','x'
    while(!feof($myfile)){//非文件末尾
        $lines[] = fgets($myfile);//按照行读取,如果用fgetc则是按照字节读取
    }
}

//拷贝文件
copy($path,'/tmp/test1.txt');
$files = scandir('/tmp');//返回结果为数组形式
if(rename('/tmp/test1.txt','/tmp/new.txt')){
    var_dump(scandir('/tmp'));
}

//删除文件
if(unlink('/tmp/new.txt')){
    var_dump(scandir('/tmp'));
}

其中关于文件的打开模式,具体如下:

模式说明
r只读模式,不能用fwrite进行写的操作
r+读+写均可
w只能重头写入 ,文件不存在的时候创建
w+读+写均可
a以向文件末尾追加内容的方式写入:append。文件不存在的时候创建
x(保护模式)如果文件存在就不碰文件了,如果不存在就会创建文件,文件指针移动到文件开头

4,正则表达式

元字符说明
.匹配除换行符以外的任意字符
\w匹配字母,数字或下划线
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
[x]匹配x字符,如匹配字符串中的a、b、c字符
\W\w的反义,匹配任意非字母数字下划线和汉字的字符
\S\s的反义,匹配任意非空白的字符
\D\d的反义,匹配任意非数字的字符
\B\b的反义,不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符。[^abc]匹配除了abc这几个字母之外的任意字符
量词说明
*重复0次或者多次
+重复1次或者更多次
重复0次或者1次
{n}重复n次
{n,m}重复n到m次
{n,}重复n或者更多次

注意:
1,当我们需要匹配这些元字符的时候,我们需要用到字符转义功能,同样正则表达式里面用\表示转义,如要匹配.符号,则需要用.,否则会被解释成“除换行符外的任意字符”。当然,要匹配\,则需要\。
2,连续的数字或字母可以用-符号连接起来,如匹配所有的小写字母,[1-5]匹配1到5这5个数字。
3,由于对正则表达式的匹配结果不那么确定,可以下载一些辅助工具用于测试正则表达式的匹配结果,比如Match Tracer、RegExBuilder等,以及其他类似的工具。

应用:preg_match( p r e g e x p r e s s i o n , pregexpression, pregexpression,string, m a t c h ) ; 其 中 将 匹 配 结 果 存 放 到 match); 其中将匹配结果存放到 match);match中, m a t c h [ 0 ] 为 全 部 匹 配 的 结 果 , match[0]为全部匹配的结果, match[0]match[1]为第一部分匹配的结果。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值