phper基础

变量

什么是引用变量?在PHP中,用什么符号定义引用变量?

  • 概念:在PHP中引用意味着用不同的名字访问同一个变量内容。
  • 定义方式:使用&符号
    //range(m,n);生成一个m到n的数组  
     $a = range(0,1000);  

     //$a 和 $b 共同指向一处内存  
     $b = $a;  

     //Cow Copy On Write  
     //$a 重新分配内存  
     $a = range(0,1000);  

     //unset 只会取消引用,不会销毁空间  
     unset($a);  

     //关于类 对象本身就是引用传值  

     1.$a = 'a';  
     $b = &$a;  
     $b = 'b';  
     echo $a;//打印出 b  

     2.$data=array('a','b','c');  
     foreach($data as $k => $v){  
        $v = &$data[$k];  
        var_dump($data);  
     }  
     //输出 abc bbc bcc

字符串

PHP中字符串可以使用那三种定义方法以及各自的区别是什么?

  • 双引号 单引号 newdoc heredoc
  • 单双引号的区别
    1.双引号可以解析变量 效率差一点
    2.单引号不可以解析变量 效率高一点
    3. newdoc相当于单引号 heredoc相当于双引号 处理大字符串

数据类型

三大数据类型(标量 符合 特殊)
  • 浮点型不能用来比较

  • 布尔类型 false的七种情况

    整型0、浮动0.0、布尔false、空字符串、0字符串、空数组、NULL

数组类型

超全局数组

    $GLOBALS、($_REQUEST、($_GET$_POST$_COOKIE)、$_SESSION$_SERVER$_FILES$_ENV  )  
    $GLOBALS包含后面所有  
    $_REQUEST包含get post cookie ,尽量少用  

    $_SERVER['SERVER_ADDR']服务器端IP地址  重点!  
    $_SERVER['REMOTE_ADDR']客户端IP地址  重点!  

    $_SERVER['SERVER_NAME']服务器名称  
    $_SERVER['REQUEST_TIME']请求时间  
    $_SERVER['QUERY_STRING']  路径问号后面的字符串  
    $_SERVER['HTTP_REFERER']上级请求的页面  
    $_SERVER['HTTP_USER_AGENT']头信息  

    $_SERVER['PATH_INFO']返回部分URL路径  
    $_SERVER['REQUEST_URI']  返回URL路径  
    //当前页面是http://www.zixueku.com/plus/search.php?kwtype=0&keyword=php&searchtype=titlekeyword  
    echo $_SERVER["REQUEST_URI"];  
    //结果就为:plus/search.php?kwtype=0&keyword=php&searchtype=titlekeyword

NULL

直接赋值为NULL、未定义的变量、uset销毁的变量

常量

常量一经定义,不能修改和删除
const、define
const更快 是语言结构 define是函数
define不能定义类的常量,const可以
- 预定义常量

    __FILE__文件路径名和名称  
    __LINE__所在行的行号  
    __DIR__  所在目录  
    __FUNCTION__  所在函数体的函数名称  
    __CLASS__  所在类的类名  
    __TRAIT__  此常量返回 trait 被定义时的名字(区分大小写)  
    __METHOD__  返回类名加方法名  
    __NAMESPACE__  返回命名空间名称  
用PHP写出显示客户端IP与服务器IP的代码
<?php
    echo $_SERVER['SERVER_ADDR'];  
    echo "<br>";  
    echo $_SERVER['REMOTE_ADDR'];  
?>
__FILE__表示什么意思?

返回所在文件的文件名

运算符

foo()和@foo()之间的区别
  • PHP支持一个错误运算符:@ 当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉
运算符的优先级

递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符(^) > 位运算符(|) > 逻辑与(&&) > 逻辑或(||) > 三元 > 赋值 > and > xor > or
递增/递减 > ! > 算术运算符 > 大小比较 > 逻辑与 > 逻辑或 > 三元 > 赋值
推荐使用括号

  • false的七种情况
  • 递增递减不影响布尔值
  • 递减NULL 无效
  • 递增NULL 值为1
  • 递增/递减在前 先运算 后返回值
  • 递增/递减在后 先返回值 后运算
  • 短路作用
  • ||和&&与or和and的优先级不同
    1.  $a = true || $b == 3;    // $a = (true || ($b == 3))

    2.  短路作用
        $b = false && $a == 1;   //$b = (false && ($a ==1))

        $a = false || true;	//$a = (false || true)  输出true
        $b = false or true;	//($b = false) or true 输出false
    3.  $a = 0;
        $b = 0;
        if($a = 3 > 0 || $b = 3 > 0)     //if(($a = (3 > 0) ||) $b = 3 > 0){ //$b = 3 > 0 短路不执行
            $a++;
            $b++;
            echo $a;   //ture递增 输出 1
            echo $b;   //递增0 输出 1
        }
     4.     var_dump($a=false || $a = true);   //bool(true)
        var_dump($a=true || $a = false);  //bool(true)

流程控制

请列出三种PHP数组循环操作的语法,并证明各种循环的区别
考察:PHP遍历数组的三种方式 及各自区别 延伸:分支结构
  • for循环
    • 只能遍历索引数组
  • foreach遍历
    • 可以遍历索引和关联数组
    • 会执行reset()操作
  • while、list()、each()组合
    • 可以遍历索引和关联数组
    • 不会重置数组的指针 reset()操作

if…else if

  • 在else if 语句中,只能有一个表达式为true。只能有一个语句块被执行。
  • 优先把范围小的条件放在前面处理,利于优化性能。

switch…case…

  • switch后面的控制表达式的数据类型只能是 整型、浮点、字符串类型
  • continue语句作用到switch的作用类似于break
  • continue n 跳出n层循环
  • 比if…else if 效率高
    for(){
        switch($var){
            case ...;
            //代码
        break;
            case ...;
                //代码
                break(等价于continue);
            case ...;
                //代码
                break(continue 2 跳出两层循环);
        default:...;
            //代码
            break;
        }
    }
PHP中如何优化多个 if…else if 语句的情况?

表达式的可能越大越往前放
使用switch…case效率更高

自定义函数及内部函数

<?php
    $count = 5;
    function get_count()
    {
        static $count;
        return $count++;
    }
    echo $count;   //5
    ++$count;  //6

    echo get_count; //null 不会被输出
    echo get_count; //1
  • 考点:变量的作用域和静态变量
    • global关键字
    • 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不会消失。
    • static关键字
      1. 仅初始化一次
      2. 初始化时需要赋值
        3.每次执行函数,该值都会保留
      3. static修饰的变量是局部的,仅在函数内部有效
      4. 可以记录函数的调用次数,从而可以在某些条件下终止递归
    $a = 'a';
    $b = 'b';
    $c = 'c';
    function a()
    {
        global $b;
        $GLOBAL['c'];
        echo $b;
        echo $c;
        echo $a;
    }
    a();    //输出 b c  报undefined variable $a错误
  • 延伸:函数的参数及参数的引用传递
    $a = 1;
    $b = 1;
    function fun($a,&$b){
        $a = 2;
        $b = 2;
    }
    fun($a,$b);
    echo $a;   //1
    echo $b;   //2
  • 延伸:函数的返回值及引用返回
    • 值通过使用可选的返回语句(return)返回
    • 可以返回包括数组、对象的任意类型
    • 返回语句会终止函数执行,将控制权交回函数调用处
    • 省略return,返回值位NULL,不可有多个返回值
    • 引用返回
      • 从函数返回一个引用,必须在函数声明和 指派 返回值 给一个变量时,都使用引用运算符&
         
        function &fun()
        {
        static $b = 10;
        echo $b.' ';
        return $b;
        }
        $a = fun(); //$a 等于 10
        $a = &fun();
        $a = 100;
        echo fun(); //输出 20 100 不会改变$b的值,只会改变fun()的返回值
  • 延伸:外部文件的导入
    • include/require语句包含并运行指定文件
    • 如果给出路径名 按照路径来找,否则从include_path中找(环境变量)
    • 然后从调用脚本文件所在的目录和当前工作目录下寻找
    • 当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围
    • 未找到文件,include结构会发出一条警告;require则会发出一个致命错误
  • 延伸:系统内置函数
    • 时间日期函数
      • date() 格式化输出日期
      • strtotime() 将任何英文文本的日期时间描述解析为 Unix 时间戳
      • mktime() 取得一个日期的 Unix 时间戳
      • time() 返回当前时间戳
      • microtime() 返回当前 Unix 时间戳和微秒数
      • date_default_time设定用于一个脚本中所有日期时间函数的默认时区
    • IP处理函数
      • ip2long() IPv4地址转换成整型
      • long2ip()将对应的整型数字格式转为IPv4地址
    • 打印处理
      • print() 只能打印一个值
      • printf() 输出格式化字符串
      • print_r()
        • echo 可以多值输出
      • sprintf()
      • var_dump() 格式化打印
      • var_export() 格式化打印、返回的数组可以直接使用
    • 序列化和反序列化
      • serialize()
      • unserialize()
    • 字符串处理函数
      • implode() 将一维数组转化为字符串
      • explode() 用一个字符串分割另一个字符串
      • join() implode的别名
      • strrev() 翻转字符串
      • trim() 去除字符串两边空格
      • ltrim() 去除字符串左边空格
      • rtrime() 去除字符串右边空格
      • strstr() 查找字符串的首次出现
      • number_format() 以千分位隔符方式格式化一个数字
    • 数组处理函数
      • array_keys() 返回数组所有的键
      • array_values() 返回数组所有的值
      • array_diff() 求数组差集
      • array_intersect() 求数组交集
      • array_merge() 数组合并
      • array_shift() 数组头部弹出一个值,返回弹出的值
      • array_unshift() 数组头部加入一个值,返回数组新的单元数
      • array_pop() 数组尾部弹出一个值,返回被弹出的值
      • array_push() 数组尾部压入一个或多个值,返回新单元数
      • sort() 排序
$var1 = 5;
$var2 = 10;
function foo(&$my_var)
{
    global $var1;
    $var1 +=2;     //=>7
    $var2 = 4;     //=>4
    $my_var += 3;      //=>8
    return $var2;  //=>4
}
$my_var = 5;
echo foo($my_var); //=>4
echo $my_var;      //=>8
echo $var1;            //=>7
echo $var2;            //=>10
$bar = 'foo';
$my_var = 10;
echo $bar($my_var); //=>$foo($my_var) =>4

正则表达式

至少写出一种验证139开头的手机号的正则表达式
$str = 13988882222;
$pattern = '/^139\d{8}$/';
preg_match($pattern,$str,$match);
var_dump($match);
  • 正则表达式的作用:分割、查找、匹配、替换字符串
  • 分隔符:正斜线(/)、hash符号(#)以及取反符号(~)
  • 通用原子:
    • \d 0-9
    • \D 除了0-9
    • \w 数字字母下划线
    • \W 除了数字字母下划线
    • \s 匹配任何空白字符,包括空格、制表符、换页符等等
    • \S 匹配任何非空白字符,包括空格、制表符、换页符等等
  • 元字符
    • . 除换行符以外的任意字符
      • 重复零次或更多次
      • 匹配至少 1 个元字符,相当于 {1,}
    • ? 匹配 0 到 1 个元字符,相当于 {0,1}
    • ^ 以某某开始
    • $ 以某某结束
    • {n} 匹配n次
    • {n,} 匹配n次或更多次
    • {n,m} 匹配n到m次
    • [] 括号内为逻辑或 关系
    • () 括号内视为一个原子
    • [^]
    • | 逻辑与
    • [-]
  • 模式修正符
    • i 不区分大小写的匹配
    • g 表示全局匹配
    • m 将字符串视为多行,不管是那行都能匹配;
    • e 配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行;
    • s 将字符串视为单行,换行符作为普通字符
    • U 只匹配最近的一个字符串,不重复匹配。反贪婪模式
    • x 将模式中的空白忽略;
    • A 强制从目标字符串开头匹配;
    • D 如果使用$限制结尾字符,则不允许结尾有换行;
    • u 表示待匹配的串是一个符合 unicode 编码规则的串
  • 后向引用
  • 贪婪模式
  • PCRE函数
    • preg_match() 执行一个正则表达式匹配
    • preg_match_all() 执行一个全局正则表达式匹配
    • preg_replace() 执行一个正则表达式的搜索和替换
    • preg_split() 通过一个正则表达式分隔字符串
匹配所有img标签中的src的值
$str = '<img id="av" src="av.jpt" alt="高清无码">';
$pattern = '/<img.*?src="(.*?)".*?\/?>/i';
preg_match($pattern,$str,$match);
var_dump($match);

面向对象

  • 单一继承
  • 方法重写
  • 多态
    • 抽象类的定义
      • -
    • 接口的定义
      • -
  • 魔术方法
    • -
  • 设计模式
    • 工厂模式
    • 单例模式
    • 注册数模式
    • 适配器模式
    • 观察者模式
    • 策略模式
你在开发中使用过哪些设计模式,这些设计模式实现的原理是什么?
请写出PHP的构造函数和析构函数
请写出PHP的类权限控制修饰符
  • public
  • protected
  • private

网络协议

  • HTTP协议状态码
    • 200 ok
    • 204 请求成功 返回内容为空
    • 206 请求成功 返回部分内容
    • 301 永久性重定向
    • 302 临时重定向
    • 303 请求的资源有另一个uri 因修改git方法定向获取资源
    • 304 允许请求,但没有满足附带的条件
    • 307 = 302
    • 400 请求报文中有语法错误
    • 401 没有所需要的http认证信息
    • 403 服务器拒绝请求
    • 404 找不到页面
    • 500 服务器发生错误
    • 503 服务器超负载或正在停机维护
  • OSI七层模型
    • -

开发环境及配置

您是否使用过版本控制器软件?如果有 您用的版本控制器软件的名字是什么?
php的运行原理
  • CGI php解析器和webServer之间的桥梁
  • FastCGI 是一套协议,不再是通过简单的环境变量、标准输入和标准输出来接收和传递数据了。一般来说,FastCGI 用 TCP 或者命名管道(Named Pipe)传输数据
  • PHP-FPM 是FastCGI的进程管理器
    • master进程 负责监听端口
    • work进程 处理代码 一般有多个
      register_globals 注册为全局变量,开启时,传递过来的值会被直接的注册为全局变量直接使用,关闭时,我们需要到特定的数组里去得到它。建议关闭
      allow_url_fopen 是否允许被远程打开文件
      allow_url_include 是否允许远程包含文件:包括,include_once,required,require_once。
      date.timezone 设置时区
      display_errors 是否在屏幕显示报错信息
      error_reporting 设置错误报告等级
      safe_mode php 安全模式
      upload_max_filesize 上传文件的最大
      max_file_uploads 上传文件的最大数
      post_max_size post上传文件的最大值
请简述CGI FastCGI和PHP-FPM的区别
  • CGI 负责连接php解析器和webServer
  • FastCGI提高了CGI效率
  • PHP-FPM 是FastCGI加上进程管理器

Linux

写出尽可能多的Linux的命令
  • 系统定时任务
  • vi/vim编辑器
  • shell基础
    • 脚本执行方式
      • 赋予权限,直接执行,例:chmod + test.sh;./test.sh
      • 调用解释器使得脚本执行,例:bash csh ash bsh
      • ksh
      • source 例:source test.sh
    • 编写基础
      • 开头用#!指定脚本解释器,例如:#!/bin/sh
  • 系统安全
    • sudo su chmod setfacl
  • 进程管理
    • w top ps kill pkill pstree killall
  • 用户管理
    • id usermod useradd groupadd userdel
  • 文件系统
    • mount umount fsck df du
  • 系统关机和重启
    • shutdown reboot
  • 网络应用
    • curl telnet mail elinks
      -网络测试
    • ping netstat host
  • 网络配置
    • hostname ifconfig
  • 常用工具
    • ssh screen clear who date
  • 软件包管理
    • yum rpm apt-get
  • 文件查找和比较
    • locate find
  • 文件内容查看
    • head tail less more
  • 文件处理
    • touch unlink rename In cat
  • 目录操作
    • cd mv rm pwd tree cp ls
  • 文件权限属性
    • setfacl chmod chown chgrp
  • 压缩解压
    • tar bzip2/bunzip2 gzip/gunzip zip/unzip
  • 文件传输
    -ftp scp
  • Linux系统定时任务
 crontab -e
     * * * * * 命令(分 时 日 月 周)
 at命令
      #at 2:00 tomorrow
      at>/home/Jason/do_job
      at>Ctrl+D
如何实现每天0点重新启动服务器
crontab -e
0 0 * * * reboot

GodConfident

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值