PHP基础知识篇

2019-03-01T14:29:00

1.什么是引用变量?

用不同的名字访问同一个变量内容:在PHP中引用意味着用不同的名字访问同一个变量内容,使用&符号
注:unset(),只会取消引用,不会销毁内存空间.
对象本身就是引用传递.

例题:


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

单引号

  • 不能解析变量和转义字符,只能解析单引号和反斜线本身
  • 变量和变量,字符串和字符串之间可以使用.链接,效率高于双引号
    双引号
  • 可以解析变量,变量可以使用{}包含,可以解析所有转义字符
  • 可以使用.链接
    herdoc
  • 类似于双引号
    newdoc
  • 类似于单引号

延伸:数据类型

  • 浮点类型:不能用于计算
  • 布尔类型:false情况
    0, 0.0, '', '0', false, array(), NULL
  • 数组类型:超全局数组
    $GLOBALS, $_GET, $_POST,$_REQUEST, $_SESSION, $COOKIE, $_SERVER, $_FILES, $_ENV
    $_SERVER['SERVER_ADDR']------服务器ip地址
    $_SERVER['SERVER_NAME']------服务器名称
    $_SERVER['SERVER_TIME']------服务器时间
    $_SERVER['HTTP_REFERER']-----上级请求地址
    $_SERVER['REMOTE_ADDR']------客户端ip地址
    $_SERVER['PATH_INFO']--------url地址路径
  • NULL:三种情况
    直接赋值为NULL,未定义的变量,unset销毁的变量
  • 常量
    定义方式:conset,define
    conset更快,是语言结构,define是函数
    conset可以定义累的常量,define不可以
    常量一经定义不能删除
    预定义常量:

        __FILE__      ---- 所在文件的路径和文件名
        __LINE__      ---- 所在行的行号
        __DIR__       ---- 所在目录
        __FUNCTION__  ---- 所在函数提的函数名称
        __CLASS__     ---- 所在的类名
        __TRAIT__     ---- trait名称
        __METHOD__    ---- 所在函数方法名
        __NAMESPACE__ ---- 命名空间名称
    

3.foo()和@foo()有什么区别?

@:php的运算符,放在表达式前面会忽略所有错误

延伸:

  • 运算符优先级:
    递增递减 --> ! --> 算术运算符 --> 大小比较运算符 --> 相等比较运算符 --> 引用 --> 位运算符(^) --> 位运算符(|) --> 逻辑与 --> 逻辑或 --> 三元 --> 赋值 --> and --> xor --> or
  • 比较运算符:
    == 和 === 的区别
if ('== false') {
    echo '';
} elseif ('0' == 0) {
    echo '';
} elseif (0.0 == 0) {
    echo '';
}
  • 等值判断(FALSE七种情况)
  • 递增递减运算符
    递增递减运算符不用想布尔值
    递减NULL值没有效果
    递增NULL的值为1
    递增递减在前就先运算后返回,反之就先返回后运算
  • 逻辑运算符

    • 短路作用
    • || 和 $$ or 和 and 的优先级不用

      $a = false || true; // true
      $a = false or true; // false


4.请列出3种PHP数组循环操作的语法,并注明各种循环的区别

  • for,foreac,while,list(),each()
  • for只能遍历索引数组,foreach可以遍历索引和关联数组,;先和使用,list(),each(),while()循环同样可以遍历索引和关联数组
  • while,list(),each()不会reset()
  • foreach会对数组进行reset()

延伸:PHP分支

  • if....elseif
    只能有一个表达式喂true,即在elseif语句中只能有一个语句块被执行,多个elseif从句是排斥关系,使用elseif语句有一个基本原则,总把有限范围小的条件放在前面处理
  • switch...case...
    和 if 不同的是,switch后面的控制表达式的数据只能是整形,浮点型或者字符串
    continue语句作用到switch的作用类似于break
    跳出sswitch外的循环可以使用continue2
    会生成一个跳转表,会直接跳转到对应的case

5.写出如下程序的执行结果:

$count = 5;
function get_count()
{
    static $count; //NULL
    return $count++;
}

echo $count; // 5;
++$count;

echo get_count();// NULL
echo get_count();// 1

延伸

变量的作用域和静态变量

static关键字

  1. 仅初始化一次
  2. 初始化时需要赋值
  3. 每次执行函数该值会保留
  4. static修饰的变量是局部的,仅在函数内部有效
  5. 可以记录函数的调用次数,从而终止递归

函数的参数以及参数的引用传递
函数的返回值及引用返回


外部文件的导入
include/require语句包含并运行制定文件
如果给出路径名按照路径来找,负责从include_path查找,如过include_path也没有,则从当前露文件所在目录下寻找
加载过程中文件未找到include结构会发出一条警告,程序继续运行,require会发出一个error,程序停止运行
时间日期函数
date(),strtotime(),mktime(),time(),microtime(),
date_defaulet_timezone_set()
IP处理函数
ip2long(),long2ip()
打印函数
语言结构:

  • echo 可打印多个,用逗号隔开(效率好)
  • print() 只能打印一个
    函数:
  • printf() 根据格式进行输出,直接输出到缓冲区
  • sprintf() 不会输出,会返回
  • print_r() 会将数组,对象格式化好打印出来
  • var_dump() 也会打印格式,但会打印各个类型

序列化和反序列化
serialize(),unserialize()
字符串处理函数

  • implode()
  • explode()
  • join()
  • strrev()
  • trim()
  • ltrim()
  • strstr()
  • number_format()

例题


6.至少写出一种139开的11位手机号的正则表达式

$preg = '/^1[3|4|5|6|7|8|9]d{9}%/';

延伸

正则表达式的作用
分割,查找,匹配,替换字符串
分隔符:正斜线(/)
通用原子:

  • \d 表示任意一个十进制的数字 [0-9]
  • \D 表示任意一个除数字这外的字符(除了0-9) [^0-9]
  • \s 表示任意一个空白字符,空格、\n\r\t\f [\n\r\t\f ]
  • \S 表示任意一个非空白 1
  • \w 表示任意一个字(数字字母下划线) a-zA-Z0-9_ [a-zA-Z0-9_]
  • \W 表示任意一个非字,除了(数字字母下划线)a-zA-Z0-9_以外的任意一个字符 [^a-zA-Z0-9_]

元字符:

  • . 除了换行符之外的任意字符
  • * 匹配前面的内容出现零次一次或多次
  • ? 零次或一次
  • ^ 开头
  • $ 结尾
  • + 一次或多次
  • {n} 正好出现n次
  • {n,m} n次到m次
  • [] 集合(或)
  • () 后向引用
  • [^] 取反
  • | 或者
  • [-] 范围

例题


7.不断在文件 hello.txt 头部写入一行 "Hello World" 字符串,要求代码完整

<?php
    $file = './hello.txt';
    $handle = fopen($file, 'r');
    $content = fread($handle, filesize($file));
    $content = 'Hello World' . $content;
    fclose($handle);
    $handle = fopen($file, 'w');
    fwrite($handle, $content);
    fclose($handle);

延伸:目录的操作函数,其他文件操作

  • 文件读取写入操作

    • fopen() 用来打开一个文件,打开时需要制定打开模式

      • 打开模式
        r/r+ 只读-文件开头/读写-文件开头(替换写入)

    w/w+ 清空写入/清空读写(文件不存在则创建)
    a/a+ 追加写入-文件末尾/追加读写-文件末尾(文件不存在则创建)
    x/x+ 写入打开-文件开头/读写打开-文件开头(如果文件存在报错)

    • 写入函数:fwrite(),fputs()
    • 读取函数:fread(),fgets(),fgetc()
    • 关闭函数:fclose()
    • 不需要fopen()打开的函数
      file_get_contents()

    file_put_contents()

  • 目录操作函数

    • 名称相关:basename(),dirname(),pathinfo()
    • 目录读取:opendire(),readdir(),closedir(),rewinddir()
    • 目录删除:rmdir()
  • 其他函数

    • 文件大小:filesize()
    • 目录大小:disk_free_space(),disk_total_space()
    • 文件拷贝:copy()
    • 删除文件:unlink()
    • 文件类型:filetype()
    • 重命名文件或目录:rename()
    • 文件属性
      file_exists() 文件是否存在

    is_readable() 文件是否可读
    is_writable() 文件是否可写
    is_executable() 是否可执行
    filectime() 文件修改时间
    fileatime() 文件访问时间
    filemtime() 文件整个修改时间

    • 文件锁:flock()
    • 文件指针:ftell(),fseek(),rewind()

### 例题:通过函数的方式对目录进行遍历,写出程序

function loopDir ($dir)
  {
      // 打开目录
      $handle = opendir($dir);
      while(false !== ($file = readdir($handle))) {
          if ($file != '.' && $file != '..') {
              echo $file . "\n\r";
              if (filetype($dir . '/' . $file) == 'dir') {
                  loopDir($dir . '/' . $file);
              }
          }
      }
  }
  
  loopDir($dir);

8:简述cookie和session的区别及工作机制,储存位置等,件数cookie的优缺点

cookie存在客户端,不会占用服务器资源,但是数据不安全,如过用户禁止cookie则不能使用
session信息安全,但放在服务器端占用服务器资源

延伸

  • 会话控制
    GET参数传递:信息不安全,参数丢失

Cookie: 存储在客户端的文件

  • Cookie操作
    设置:setcookie($name,$value,$expire,$path);

读取:$_COOKIE:只读
删除:setcookie($name, '', time() - 1000)
Session:储存在服务器端

  • Session操作
    session_start();

$_SESSION
$_SESSION = []
session_destroy

  • 配置(php,ini)
    session.auto_start 是否自动开启session

session.cookie_domain 存储sessionid的有效域名

  • 传递Sessionid

     session_name()和session_id()
     <a href="1.php?PHPSESSIONID=<?php echo session_name() . '=' . session_id(); ?>"></a>
    <a href="1.php?PHPSESSIONID=<?php echo SID; ?>"></a>
  • session存储
    session_set_save_handler()

MySql,Memcache,Redis等

9:请写出PHP类权限控制修饰符

延伸

  • 面向对象:封装,继承,多态
  • 类权限修饰符
    public 可以在类的内部,外部,子类里使用

protected 受保护的的,可以在类的内部使用,子类里使用
private 只能在类的内部使用

  • 面向对象的继承
    单一继承

方法重写

    • 魔术方法
      __constrouct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__clone()
    • 设计模式
      工厂模式,单例模式,注册树模式,策略者模式

    **10:HTTP/1.1,状态码200 301 304 403 404 500 的含义

    • 200 请求成功
    • 301 永久重定向
    • 304 请求错误
    • 403 访问被拒绝
    • 404 页面丢失
    • 500 服务器错误

    延伸

    • HTTP协议的状态吗

      • 1xx(信息类,表示请求正在处理)
      • 2xx(成功状态码,请求正常处理完毕)
      • 3xx(重定向,需要进行附加操作已完成请求)
      • 4xx(客户端错误,服务器无法处理请求)
      • 5xx(服务器错误)
      • 常见状态码

        • 200 请求成功
        • 204 请求已成功处理,但返回部分不含实体的主体部分
        • 206 成功执行部分内容
        • 301 永久性重定向
        • 302 临时性重定向
        • 303 存在另一个请求资源
        • 304 请求未满足条件
        • 400 badrequeset 请求错误
        • 401 发送请求需要有通过http认证的认证信息
        • 403 访问被拒绝
        • 404 服务器无法找到资源
        • 501 在执行请求时发生了错误
        • 503 服务器在维护
    • OSI七层模型

      • 第一层:物理层(建立,维护,断开物理连接)
      • 第二层:数据链路层(建立逻辑连接,进行硬件地址寻址,差错校验等功能)
      • 第三层:网络层(逻辑地址寻址,实现不同网络之间路径选择)
      • 第四层:传输层(定义传输数据的协议端口号,以及流控和差错校验)

        • 协议有:TCP UDP,数据一旦离开网卡即进入网络传输层
      • 第五层:会话层(建立,管理,终止会话)
      • 第六层:表示层(数据的表示安全和压缩)
      • 第七层:应用层(网络服务与最终用户的一个接口)

        • 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POPS DHCP
    • HTTP协议工作特点和原理

      • 工作特点:给予B/S模式,通信开销小,简单快速,传输成本低,使用灵活,可使用超文本传输协议,节省传输时间,无状态
      • 工作原理:客户端发送请求给服务器,创建一个TCP链接,指定端口号,默认80,链接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容
    • HTTP协议常见的请求头/响应头
      Content-Type,Accept,Origin,Cookie,Cache-Control,User-Agent,Referrer,X-Forwarded-For,Access-Control-Allow-Origin,Last-Modified
    • HTTP协议请求方法

      • GET 主要用于数据的读取
      • POST 主要用于向服务器提交数据
      • HEAD 服务器响应时只会返回头信息
      • OPTIONS 测试服务器功能
      • PUT 向服务器传送制定资源内容
      • DELETE 删除资源
      • TRACE 用于HTTP请求的测试
    • GET和POST请求的区别

      • GET在做前进或后退以及刷新时是无害的,而POST会重新提交数据
      • GET可以收藏为书签,而POST不可以
      • GET可以被浏览器缓存,而POST不可以被缓存
      • GET在历史记录里参数会保留,而PSOT参数不回保留到历史记录
      • GET传输数据最大2048个字符,而POST没有限制
      • GET安全性比较差,而POST比较安全
    • 常见的网络协议函以及端口

      • FTP(21) 文件传输协议
      • Telnet(23) 用于远程登录端口
      • SMTP(25) 简单邮件传输协议
      • POP3(101) 用于接收邮件
      • HTTP(80) 超文本传输协议
      • DNS(53) 域名解析服务

    11:是否使用过版本控制器,使用了什么

    延伸

    • 版本控制软件

      • 集中式(CVS和SVN):只在中央服务器中存储
      • 分布式(Git):每个客户端都有一个完整的版本库信息
    • PHP的运行原理(Nginx + PHP-FPM)

      • CGI:解决PHP和webServer通信问题(效率低)
      • FastCGI:CGI改良版本,不用每次生成和杀死进程
      • PHP-FPM:FastCGI的进程管理器,提供进程(master/work)管理的功能

        • master进程:只有一个,负责监听端口,接受来自webServer的请求
        • worker进程:多个,每个进程内部都会的嵌入一个PHP解析器,用来处理PHP代码
    • PHP常见配置项

      • register_globals:注入变量
      • allow_url_fopen 是否允许远程打开文件
      • allow_url_include 是否允许远程包含
      • date.timezone 设置时区
      • display_errors 是否现实错误
      • error_reporting 设置错误级别
      • safe_mode 是否开启安全模式
      • upload_max_filesize 上传最大文件大小
      • max_file_uploads 上传最大文件数量
      • post_max_size 提交的POST最大数据限制

    例题

    • 请简述CGI,FastCGI和PHP-FPM的

    12:下列不适于javaScript语法关键/保留字的是(var,$,fucntion,while)

    延伸

    • javaScript基本语法

      • 使用var声明变量
      • 创建对象:new Object()
    • DOM对象

      • Document,Element
    • jQuery基础

      • jQuery选择器
      • jQuery事件
      • jQuery效果
      • jQuery DOM操作

    13:AJAX技术利用了什么协议?简述AJAX的工作机制

    Ajax的核心技术是XMLHttpRequest,它是JavaScript的一个对象,通过在后台与服务器进行少量数据请求,AJAX可以使网页实现异步更新

    延伸

    • AJAX基本概念:通过在后台与服务器进行少量数据请求,AJAX可以使网页实现异步更新

    14:写出尽可能多的Linux命令**

    ls,ll,rm -rf,cd,crontable -e,chmod,chwon,cp,mv,touch,mkdir,w,ps,kill,pkill,netstat -lmp|preg 80,shutdown,reboot,curl,telent,mail,elinks,ping,ifconfig,clear,yum,rpm,apt-get,find,cat,tree,pwd

    延伸

    • Linux系统定时任务

      • crontable命令

        • crontable -e
                  • (分 时 日 月 周)
      • at命令

        • at 2:00 tomorrow

          at>/home/job

    • vi/vim编辑器
    • shell基础

      • 编写基础

        • 开头用#!指定脚本解释器,例如:#!/bash/sh
        • 编写具体功能

    例题

    • 如何实现每天0点重启服务器
    • crontable -e

      • 0 0 * * * reboot


    1. nrtf
    当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »