PHP 基础知识-1

面试的时候发现自己有时候连最基础的知识都不能准确的回答,甚是可悲,万丈高楼平地起!

1-语法规范

  1. 行位单位、所以每行要用分号结束
  2. 变量严格区分大小写,函数名、方法名、类名不区分大小写

2-标签4种

  1. xml风格<?php ?>
  2. script风格<script language="php"> echo "script"; </script>
  3. 短格式<? echo 'php'; ?>
  4. sap格式 <% echo "php"; %>

3-注释

  1. 双引号

  2. 单引号

    注意:双引号不能与单引号错位

4-变量

1-变量的定义

变量就是内存中用于临时存储数据的一个内存空间,每一个空间都有一个名子,这个名子就是变量名,变量名的作用是用于引用,通过变量名对变更的操作就是对内存的对应的空间都读写。

语法:$变量名=值;

  1. 变量名必须是字符数字下划线开头
  2. 必须以 $ 开头
  3. 变量名严格区分大小写

2.-可变变量

A变量值是另一个变量的名,就可以在A变量名前加两个$读取另一个变量的值。

$a = 'b';
$b = 'c';

$$a = 'c';

3-预定义变量 (9种、$_$GLOBALS)

  1. $_GET 用于接收从前台以get方式传递过来的数据
  2. $_POST 用于接收从前台以post方式传递过来的数据
  3. $_REQUEST 包含get与post方式传递的数据
  4. $_SERVER 记录了客户端与服务器端的相关信息
  5. $_COOKIE 主要用于记录php会话技术中的保存在客户端的数据
  6. $_SESSION 主要用于记录php会话技术中的保存在服务器端的数据7.
  7. $GLOBALS 主要用于记录全局变量
  8. $_FILES 主要保存用户上传的文件的信息
  9. $_ENV 主要用于保存php的环境变量

6-变量的删除

  1. unset(变量名);内存中没有
  2. 变量名 = null;(变量的值是null,还存在于变量中)

7-常量

常量就是一类特殊的变量,常量也是存储数据的,但是常量一旦定义就不允许更改值,常量本身也不能删除。

  1. 常量的定义
    1. define('常量名',值);
    2. const 常量名 = 值;
  2. 区别:
    1. const可以定义类的内部和外部
    2. define只能定义类的内部
    3. define的第三个参数区别大小写 true

const的值读取:constant()

8-魔术常量(6种、__开头)

__FILE__            当前脚本文件的完整路径名
__LINE__            当前行号
__DIR__             当前文件的所在的目录
__FUNCTION__           获取当前所在的函数名
__METHOD__         获取当前所在的方法名。形式 类名::方法名
__CLASS___         获取当前所在的类名

9-数据类型

==三大类型:(4+2+2)==

  1. 标量数据类型(int、float、string、bool)
  2. 复合数据类型 (array、object)
  3. 特殊数据类型(resource、null)

一. 标量数据类型

  1. int

  2. float

  3. string

    1. 使用单引号定义的字符串能被转义的字符有\’转义成` \\转义成\

    2. 单引号中的变量不能被解释为变量的值

    3. 使用双引号定义的字符串能被转义的字符有\” \ \$ \t \n

    4. 双引号中的变量能被解释为变量的值

    5. 双引号中的变量有时需使用”{}”括起来,来限定变量

      1. php中的转义符()
      \'        单引号
      \"        双引号
      \t        tab表(制表符)
      \n        换行
      \r        回车
      \\        \
      \$        $
      1. 定界符 heredoc 、nowdoc

        <?php
        //heredoc
        $a = 100;
        $str =<<<abc
        sadsad,$a,sad
        abc;
        echo $str;
        
        //nowdoc
        $a =100; 
        $str = <<<'AAA'
        这里可以是任合内容
        我是历的苛夺基$a
        本原则叶落归根在运
        输费艰难田¥¥&……
        AAA;
        echo $str;
  4. Boolean

10-复合数据类型

  • 数组
  1. ==索引数组== 下标是整数
  2. ==关联数组== 下标是字符
  • object
    对象

11-特殊数据类型

  1. resource
  2. null

12-数据类型的转换

  1. 其他数据类型转为整型
    在这里插入图片描述

  2. 其他数据类型转为字符串

在这里插入图片描述

  1. 其他数据类型转为布尔型

在这里插入图片描述

  • 所有0、“”、“0”、null、array()转布尔都为false

13-变量与常量的内存理解

1、内存分区

  1. 栈区 cpu
  2. 堆区 存储复合类型的值
  3. 数据段 简单的值,细分全局区(全局变量、局部变量)和静态区(常量、类常量、静态变量)
  4. 代码区 (存代码)

14-执行过程

  1. 编译
  2. 执行
  3. 输出

15-函数判断

is_int()            判断是否为整型
is_bool()       判断是否为布尔类型
is_array()      判断是否为数组
is_null();      判断是否为null
is_object()     判断是否为对象
is_string()     判断是否为字符串
is_scalar();        判断是否为标量数据类型
  1. empty();
  • 判断一个变量是否为“空”,只要是能够转换为布尔false都是所谓的“空”,返回布尔true。0、0.0、””、’0’、false、null、空数组
  1. isset();
  • null的时候是false
  • 主要用于判断是否设置值,如果是null值才返回false
  1. is_null();
  • 只有是null才为true
  • 主要用于判断一个变量的值是否为null

16-PHP的输出语句

echo

print

print_r()

var_dump()

sprint_f()

十四、运算符

值得注意的是,很多人搞不清楚前自增和后自增的区别,

前自增

​ 运行规则:先对变量的值进行加1,再使用变量的值进行运算

后自增

​ 运行规则:先使用变量的值进行运算,再对变量的值进行加1

提示:

​ 无论前自增还是后自增,变量的值都会加1,唯独受影响的是整个式的结果

  1. 算术运算符
    1. 前自增
    2. 后自增
    3. 前自减
    4. 后自减
  2. 字符串运算符
    1. .
    2. .=
  3. 比较运算符
  • >、<、>=、<=、!=、==、===、!==
  • 提示:
  • 布尔false
  • 等效false的值(0、0.0、””、’0’、null、空数组)
  • 如果要严格区分等效于false的其他数据类型值与真的布尔值false,那么请求===
  1. 逻辑运算符
  • &&、||、!、and、or
  • 逻辑与短路:有一个为true返回true
  • 逻辑或短路:有一个为false返回false
and、or 与  &&、||区别:
and、or的运算优先级低于=
&&、||的运算优先级高于=
  1. 位运算符

十五、流程控制

一、 分支结构

//单分支
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的比较属于===

二、 循环控制

  1. for循环
for($i=0;$i<10;$i++){
}
  1. foreach循环
语法1:
    foreach(数组 as $v){
        //循环体
}

语法2:
    foreach(数组 as $k=>$v){
        //循环体
}
  1. while循环
while(exp){
        //循环体
}
  1. do…while循环
do{
        //循环体
}while(exp)

一、数组 count($arr)

  1. 元素
  2. 下标
  3. 个数

二、数组的相关操作

  1. 定义:array()、[]
  2. 追加
  3. 删除 usnet();

三、数组的遍历

  1. 下标连续的
for($i = 0 ;$i<count($arr);$i++){

}
  1. 下标不连续
foreach(数组 as $k => $v){
    //循环体
}

三、数组的分类

  1. 索引数组-下标是整数
  2. 关联数组-下标是字符串
  3. 混合数组

四、关联数组的遍历
==怎么把关联二维数组转换成一维数组==

 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;
    }

五、函数

  1. 函数的定义
function funName(形参列表){
        //函数体
        【return 值】;
}
  1. 形参
  • 形参主要用于接收从函数外部传递进来的数据
  • 形参只对内部可见
  • 形参可以具有默认值,如果在调用时没有为具有默认值的形参传递数据,那么在函数内部使用的形参的默认值,否则使用传递进来的数据。
  • 具有默认值的形参一般位于形参列表的最后。
  • 形参的作用是让函数更性有通用性
  1. 实参
  • 用于向函数内部传递值
  1. 匿名函数
$showInfo =function(){

}

六、静态变量

  1. ==在函数内部使用static定义的变量就是静态变量==
  2. 静态变量的特性
  • 静态变量只会被初始化一次
  • 静态变量的值不会随着函数的调用而销毁,仍然在内存,但是不能在函数外部访问。
  • 静态变量在其后函数调用时还可以访问,并且保留上一次函数运行时的结果
  • ==项目中积分的使用问题==

七、传值方式

  1. 赋值传真
    • 将变量A的值传递到变量B
  2. 引用传值
    • 将变量A的内存地址传递到变量B
  3. &地址符
    • 用于将赋值传值更改为引用传值。
  4. 函数的实参地址的传递
    • 函数的实参与形参的传值是赋值传值
    • 如果想实现函数实参与形参的引用传值,形参前面加&

八、作用域

  1. 外部作用域

    在任何函数外部定义的变量就是全局变量,其作用域就是全局作用域

  2. 内部作用域

    在函数内部定义的变量就是局部变量,其作用域就是局部作用域

  3. 全局作用域

    global关键字
    函数内部访问函数外部的变量

  4. 不受作用域限制

    1. 常量、
    2. 预定义的变量:
    3. $_GET
    4. $_POST
    5. $_REQUEST
    6. $_SERVER
    7. $_SESSION
    8. $_COOKIE
    9. $_ENV
    10. $_FILES
    11. $GLOBALS

一、PHP文件引入

  1. require
  • 在引入的文件发生错误(不存在),会直接结束当前循环的执行。
  1. inlcude
  • 在引入的文件发生错误(不存在),会继续其后的代码执行。
  1. require_once\include_once
  • 在引入文件时会先检查被引入的文件之前是否有引入过,如果没有则引入,有就不引入
    说明:一般引入的代码有逻辑性的,使用require,include一般用来引入HTML

二、针对调用的函数引入问题

  1. 同一个脚本内可以先调用函数后定义函数
  • 原理:先编译,编译后代码区就有了函数的定义代码,后再调用,正常
  1. 先调用,后引入,报错(原因是引入的文件是先引入后调用,执行调用时文件还没有定义,所以会报错)

三、PHP常用字符串

  1. ==strlen== 字符串的长度

    $string = 'http://www.doc.com/index.php/Home/Test/strlen';  
    echo (strlen($string));
  2. ==strchr== 查找search字符串首次出现的位置并截取到最后

    strchr($string,'w')
  3. ==strrchr== 查找search字符串末次出现的位置并截取到最后

    strchr($string,'i')
  4. ==strpos== 在str字符串中查询search字符串首次出现的位置(0开始算起)

    echo (strpos($string,'w'));
  5. ==strrpos== 在str字符串中查询search字符串最后一次出现的位置

    echo (strpos($string,'w'));
  • stripos、strripos i表示不区分大小写的查询
  1. ==trim==
    ①:trim(str【,substr】) 用于在str字符串两端去除指定的substr字符,如果省略substr,则是去除空格

    $string = "  zhangsan   ";
    echo(trim($string));
    
    $string1 = '22zhangsan22';
    echo '<br/>';
    echo (trim($string1,'22'));

    ②:ltrim(str【,substr】) 去除左侧指定的字符或空格

    $string2 = '22zhangsan';
    echo (ltrim($string2,22));

    ③:rtrim(str【,substr】) 去除右侧指定的字符或空格

    $string2 = 'zhangsan22';
    echo (rtrim($string2,22));
  2. ==str_repeat(str,n)==

    $string2 = 'nice';
    echo (str_repeat($string2,3));
  3. ==ucfirst、ucwords== 首写单词大写,一句话首单词大写

    $string2 = 'nice';
    echo (ucfirst($string2));
    
    $string2 = 'nice aweqwe dqwe';
    echo (ucwords($string2));
  4. ==strtolower、strtoupper== 转换大小写

  5. ==explode(sep,str)== 将字符串str,使用sep分隔符进行分割,并以数组的形式返回

    $str = "people became quite illogical when they decide";
    var_dump(explode(' ',$str));
  6. ==md5( )== 加密,返回32位字符串

  7. ==addslashes()==

  • 对于些特殊字符添加反斜杠(\),特殊字符(‘)(“)(\)
  1. ==stripslashes( )==
  • addslashes的逆运算,去除反斜杠
  1. ==htmlspecialchars== 将html语言中的标签转换成对应的字符实体。
  2. ==htmlspecialchars_decode== 逆运算
  3. ==chr、ord==
  • ord主要用于获取字符的unicode编码 97
  • chr主要用于获取指定编码对应的字符 b

四、数学函数

  1. max() 获取多个变量或数组中的最大值
  2. min() 获取多个变量或数组中的最小值
  3. abs() 获取绝对值
  4. ceil() 向上取整
  5. floor() 向下取整
  6. rand(m,n) 获取m与n之间的随机整数
  7. mt_rand(m,n); 推荐,获取m与n之间的随机整数
  8. round(v【,p】); 对变量v保留p位小数(四舍五入),如果省略p表示直接取整
  9. pow(m,n); 取m的n次方
  10. sqrt(v); 开平方

五、数组函数

  1. count() 数组长度

  2. array_keys($arr); 以数组形式返回key值

  3. array_values($arr); 以数组形式返回value值

  4. in_array($value); 判断数组$arr中存是否有$value值存在

  5. array_key_exists($key,$arr); 判断数组$arr中存是否有$key键名存在

  6. 数组添加与删除

    • array_pop(); 从尾部删除一个元素
    • array_push(); 向数组的尾部追加一个元素
    • array_shift(); 从头部删除一个元素
    • array_unshift(); 向数组的部部追加一个元素
    • array_splice(); 从数组的中间删除指定个数的元素,并以新的元素代替
  7. list结构

    list(变量列表)= 数组

    将数组中的元素的值,依次赋值给list后的变量,要求数组是一个索引数组

  8. 数组排序

    • sort(arr); 对数组进行升序排序
    • rsort($arr); 对数组进行降序排序
  9. 数组合并

    • array_merge(arrA, arrA, arrA,….);
  10. 数组指针相关的函数

  • each(); 用于获取当前数组指针所指向的元素,并返回一个混合数组,==并将指针下移==。

  • key(); 用于获取当前数组指针所指向元素键名

  • current(); 用于获取当前数组指针所指向元素的键值

  • next(); 将指针下移

  • prev(); 将指针上移

  • end(); 将指针指向最后一个元素

  • reset(); 重置指针(回到第一个元素)

<?php
$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遍历数组

<?php
$arr =[
    'id'=>2,
    'brand' => 'apple',
    'price'=> 16
];

while($data = each($arr)){
    echo $data['value'],'<br/>';
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!