PHP学习(2)

一,php 写法

PHP 除了变量不区分大小写  但是建议区分

<?php
  echo 11;


?>
<script language="php">  // php7 后 不支持了
  echo '22';
</script>
<?
  echo 33; // 需要 php.ini short_open_tag = On
?>

注: 代码后面没有 html 代码的时候 结束标签可以省略

  php 最后一条语句 分号 " ; " 可以省略 但是 省略了 结束标签 之后不能省略

    例:  <?   echo 11                          // 不可行

        <?   echo 11;                      // 可行

        <?   echo 11  ?>                 //  可行

二,注释

  //  双斜杠注释 一行

  #  注释一行

  /*    代码  */  多行注释

  小技巧

    /*    前面加斜杠之后多行注释失效    //*

      代码 

    //*  注释代码

  也可以用if 语句注释   if(1 == 0)  执行 if(1 == 1)

三,变量

  1.变量名和值  是 引用关系/指代关系

  2.没有声明操作 变量赋值 等于声明

  3. 操作 4个 

    赋值

    取值

    判断(isset($变量)返回布尔值  null 也是 false)

    删除(unset($变量))  其实是断开和值之间的联系 值还在内存中 但是会被回收

  4.命名

    (1)驼峰命名法  首单词小写 后面每个单词首字母大写

    (2)帕斯卡命名法 每个单词首字母大写

    (3)下划线分割法 都是小写 单词之间用下划线 _ 分开

  5.  传值方式

    (1) 值传递   复制值再赋值 互不影响

      $v1 = 1;

      $v2 = $v1;

    (2)引用传递   &  符  复制引用关系直接让$v2 指向 $v1 的值

      $v1 = 1;

      $v2 = & $v1;

      修改一个的值 另一个也会变 注 unset 只能切断连接 不能删除值

  6.可变变量

    $a = 'abc';

    $abc = 10;

    echo $$a;   // 10

用法

$v1 = 1;
$v2 = 2;
$v3 = 3;
$v4 = 4;
$v5 = 5;
$sum = 0;
for($i=1;$i<=5;$i++){
  $v = "v" . $i;
  $sum += $$v;
}
echo $sum;

四,预定义变量

  $_GET $_POST $_REQUEST $_SERVER $GLOBALS $_SESSION $_COOKIE $_FILES 都是数组

  request 在 get 和 post 同时存在时  默认post为主(同样的变量名post会覆盖get)// 编程不建议用  因为提交模式不清晰

  修改:php.ini    request_order = "GP"   //  G 是get P是post  后面的会覆盖前面的  可以改成 PG以get为主

  $GOLBALS 主要用于在局部范围不可以使用全局变量的时候,又需要该全局变量的值,此时就可以用它取得该全局变量的值

  $v = 1;

  echo $v; // 1 

  echo $GLOBALS['v'];  // 1

 

isset 判断变量是否存在或者变量是否为空(null)

impty 判断变量的内容是否为空 不是null 的空 二十 没有内容  比如 0, "", "0", false, null, array()空也是空

五,常量   定义以后不会变 也不应该变

  1. define("STR", '13131'); // 声明方法1

      echo STR;  // 13131

   echo constant("STR"); // 13131

  2. const STR = 123; // 方法2  // 只能用在顶层代码 而不能在大括号中

  3. 也能用可变变量   // 灵活运用

   $v = "STR";

   const STR = 123;

   echo constant($v);   // 123

  4.defined("STR");   返回布尔值

  注:使用未定义常量报错但是 还是会被使用 并且 其值是常量本身 

  5.预定义常量  // 系统自带的常量  有几百个 详情看手册

    M_PI   圆周率

    PHP_OS  当前操作系统

  6.魔术常量  其值会变化 只有几个

    __FILE__  当前网页文件

    __DIR__    当前网页文件所在目录

    __LINE__   当前所在行

 

  与变量的区别

  1.定义形式不同

  2.使用形式不同:  常量无需$符

  3.可变程度不同:  常量的额值不可以改变,也不可以销毁

  4.作用范围不同:  常量具有超全局作用(函数内外都能直接使用)

  5.作用类型不同:  常量只能存储标量类型(整形,浮点型,字符串,布尔值)

六,数据类型  8种

  1.基本类型

  整数   int,integer

    123  //  10进制  dec

    0123  // 8进制   oct

    0x123  // 16进制  hex

    0b11010  // 2进制   bin

    转换  10 进制转其他三种   //   decoct   dechex decbin

    转换  其他三种转 10 进制  //  octdec  hexdec  bindec

    没有其它转换

    转换原理

      10 转其它 //   10进制数除以  进制数  记录 余 数  一直除  直到不能除  再把所有余倒着写

      其它转10 //   每个位置 数乘以 进制数的  位置-1 次方 将所有结果相加  //  1*8^2 +  2*8^1+ 3*8^0

  浮点  float,double,real

    $v = 123.456;

    $v = 123.456E3;          123.456*10^3;

    $v = 123E3;          123*10^3;           虽然没有“.”   但还是浮点数

    因为计算机存储的关系 用浮点数 计算比较是不准确的

    应该转化为整数之后再比较

      比如:要求精度为3的小数  应该除以1000 然后取整 round()之后比较

  字符串  string

    (1)单引号字符串  中 只有最后一个 反斜杠 \  才需要转义

    (2)双引号字符串  中 可以识别变量 和  \n \r 等符号

    (3)单引号界定字符串 注意 最后的一行 除了自身的名字 “ABC” 和一个分号 其他什么都不能出现  ABC是类似常量的名字 随便取

      $str = <<<‘ABC’

      abcdefg ,fafafw 内容

      ABC;

    (4)双引号界定字符串

      $str = <<<"ABC"

      abcdefg ,fafafw 内容

      ABC;

  布尔  bool,boolen

    false, 0, 0.0, "", "0", array(), null, 未定义变量  //  都是 false

  2.复合类型

  数组  array

  对象  object

  3.特殊类型

  空   null  (值只有一个 null)

  资源类型 resource

七,类型转换

  转数字类型的时候只需要用 计算符 +-*/%  就可以把字符串转化为 数字类型

         “1abc”  //  1   

    "abc1"  //  0

    true // 1

    false  //  0

  强制转换  (int),(float),(string),(bool),(array),(object)

    $v = "123";

    $v2 =  (float) $v;

    $v3 = (string) $v;

    setType($v,'string');  // 将 $v 转换为 string

八,类型相关函数

  var_dump();  // 输出完整信息

  getType($v);  // 获取类型

  setType($v);  // 设置类型

  isset(), empty(),unset();

  is_xx类型();  判断类型

    is_int();

    is_float();

    is_string();

    is_bool();

    is_array();

    is_object();

    is_null();

    is_numeric();  // 判断数字

    is_scalar();  // 判断是否是一个 “标量类型”

九,运算

  1. +-*/%运算符

     % 对浮点数只针对整数部分运算

    字符串自增  只能是下一个字符   a=> b   A=>B    abc9=>abd0

    for循环中推荐用 前++  ++$i; 效率会更好一点

  2.比较运算

    '>'    '>='   '<'   '<='   '=='   '!='   '==='  '!=='

    == 模糊相等比较   === 精确相等比较(数据类型和内容相等)

  3. 不同类型比较

    比较数据中有布尔值转为 布尔值比较  true>false

    否则  如有数字值 转为数字值比较

    否则 都是 纯数字字符串 转为数字比较

    否则  按字符串比较

  4.字符串运算    '.'   '.='

    链接字符串           1  .  2  =>  12;  1  .=  3   =>  13;

  5.赋值运算符   '='   '+='  '-=' '*='  '/='  '%='  '.='

    $v= 1; $v+= 1;  =>   $v = $v + 1;  =>  2;

  6. 三元(三目,条件)运算符

    形式 :   $v =  数值1 ?  数值2 :  数值3;   // 对数值1取布尔值 =>  true 数值1   false 数值2

    等同

    

if(数值1){
    $v = 数值2;
}else{
    $v = 数值2;
}

  7.位运算  '&'  '|'  '~'  '^'(按位非) '<<' '>>'

    (1) & 按位与运算

      1 & 0  =>  0;   1 & 1 =>  1;  0 & 0 => 0;

      $n1 & $n2; /// n1  n2 是任意整数

      将两个整数的二进制数字形式(都是32位) 的每一个对应位上的数字进行基本按位与运算之后的结果

      例  10的二进制  0  0  0   0  1  0   1  0

         20的二进制  0  0  0  1  0  1  0  0

         与运算的结果 0  0  0  0  0  0  0  0

    (2)| 按位或运算

      1 | 0  =>  1;   1 | 1 =>  1;  0 & 0 => 0;

      $n1 & $n2; /// n1  n2 是任意整数

      将两个整数的二进制数字形式(都是32位) 的每一个对应位上的数字进行基本按位或运算之后的结果

      例  10的二进制  0  0  0   0  1  0   1  0

         20的二进制  0  0  0  1  0  1  0  0

         与运算的结果 0  0  0  1  1  1  1  0

    (3) << 按位左移(同右移>>)

      $n1 << $m;

      $n1 的二进制数(32位)往左移动m位;

        

      例  $n1 = 10;$m =2;

         10的二进制  0  0  0   0  1  0   1  0

         与运算的结果 0  0  1  0  1  0  0  0

    (4)^按位异或运算符

        0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001  (9 在内存中的存储)
      ^  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101  (5 在内存中的存储)
      -----------------------------------------------------------------------------------
          0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1100  (12 在内存中的存储)

    (5)~按位取反

    补充知识 => 源码 , 反码 ,补码

      5的

        原码  .......000000101

        反码  .......000000101

        补码  .......000000101

      -3的

        原码  10.....00000011

        反码  111...111111100

        补码  111...111111101      (反码 +1)

      注:原码第一位0是正数1是负数  计算机内部运算都用的补码

  7.2 位运算符的应用:管理一组事务的开关状态

    // 一个变量管理5个灯的开关状态 

    define("D1",1); //    00000001
    define("D2",2); //    00000010
    define("D3",4); //    00000100
    define("D4",8); //    00001000
    define("D5",16); //     00010000

    $s = 10;//  00001010   // 2 和 4 灯亮

    // 输出灯1的状态

    if(($s & D1)  > 0){

      echo '灯1是亮的'

    }else{echo '灯1是灭的';}

    // 输出灯2的状态

    if(($s & D2)  > 0){

      echo '灯2是亮的'

    }else{echo '灯2是灭的';}

 

    // 打开灯3

    $s = $s | D3;

    // 关闭灯2

    $s = $s & (~D2);

  8.数组运算符 '+' '==' '!=' '===' '!=='

    (1) +  数组联合 将右面的数组合并到左边的数组  有重复 已左边的为准

    print_r(array(1=>132,2=>465) + array(4=>'fasrf',1=>'fafa')); // Array ( [1] => 132 [2] => 465 [4] => fasrf );

    (2) == 比较两个数组相同的键名和键值 不管顺序和类型  返回 true

    (3) === 两个数组完全相同 返回true (包括顺序和类型)

注  @ 符号屏蔽当前函数错误

  优先级

  括号最优先  先乘除后加减

  运算符优先级  单目运算符>算数运算符>比较运算符>逻辑运算符(除了 “非” 运算符)

posted @ 2021-01-10 03:52  nalasu  阅读(89)  评论(0)    收藏  举报