首页  >  文章  >  后端开发  >  php学习笔记之--php变量与常量

php学习笔记之--php变量与常量

WBOY
WBOY原创
2016-06-23 14:29:36896浏览

 

php变量与常量

一、目录

  第一章 变量

         1.1变量的声明

    1.2变量的命名

    1.3变量的数据类型

    1.4变量数据类型之间的转换

    1.5与变量和类型有关的一些常用函数

  第二章 常量

    2.1常量的声明与使用

    2.1预定义常量和魔术常量

 

第一章 变量

1.1变量的声明

     1.变量以$开头定义,由$和标识符组成,标识符就是变量的名称。(函数和类的名称也是标识符)

       $变量名=值 

1.2变量的命名

    1. 变量前一定要使用”$”, 声明和使用都要有这个符号。

    2. 可以是任意长度,有任何字母、数字、下划线组成;但是不能以数字开头

    3.不能使用PHP的运算符号+ - * /  % &  .

    4. PHP可以使用系统关键字作为变量名

    5. PHP变量区分大小写,(只有变量和常l量区分大小写,其它不区分)

    6.变量名称一定要有意义,可以使用英文单词,也可以使用汉语拼音。

    7.$aaaBbbCcc  变量的命名风格,驼峰法。  

注意:可变变量(一个变量的变量名可以动态设置和使用) 

   变量的引用赋值(使用一个“&”符号加到将要赋值的变量前面(源变量))

      数组与类使用PHP的可变变量名的注意

           

可以像C++那样, 在变量的前面加上&, 例如:$a = &$b   对一个变量进行值传递。

1.3变量的数据类型  

  1.PHP是弱类型的语言,变量的类型由存储的值决定

  2.PHP中共有8种类型

     四种标量类型:

    整    型:int integer 

    布尔型:bool boolean

    浮点型:float, double, real 

    字符串:string

    两种复合类型

    数组: array

    对象:  object

    两种特殊类型

    资源类型:resource

    空类型:null

 

注:

给一个变量赋值为0123,但是输出该变量的值总是为其他数字,请问这是什么问题?
       PHP 解释器会把以0开始的数字当做是八进制的,所以它的值会变成八进制的。  

$a = 0.2+0.7;$b = 0.9;var_dump($a == $b);打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等。请问这个问题如何解决?

PHP官方手册说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333...。我们将上面的变量用双精度格式打印出来:$a = 0.2+0.7;$b = 0.9;printf("%0.20f", $a);echo '
';printf("%0.20f", $b);

输出结果如下:

0.899999999999999911180.90000000000000002220

显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,因此使用 bcadd() 函数来对浮点数想加并进行精度转换(为字符串):

var_dump(bcadd(0.2,0.7,1) == 0.9); // 输出:bool(true) 浮点数取整

在《PHP 取整函数 ceil 与 floor》一文中,曾有例子:

经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的:

经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,因此使用 round() 函数处理一下即可:

虽然 round() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。  

1.4变量数据类型之间的转换

 一种是强制转换:
  1.setType(变量, 类型); //这个函数将原变量的类型改变
  2.$a=(int)"123abc"; //在赋值前使用(类型)的形式, 不会改变原变量的类型
  3.$变量=intval(变量或值); //形成一个新的变量,原有的变量不变
注意:
1.bool型的转换
   2.整型在内存中占4个字节32位 最大2.147e9
   3.浮点型在内存中占8个字节64位 
    4.整型与浮点型之间转换时的溢出/精度损失
  5.字符串与整型和浮点型之间的转换
一种是自动转换:
  最常用的方式,因为这种我们开发时不用去管理类型,变量会根据运行环境自动转换
    

4.PHP中数据类型转换中的注意

$str="100.123abc";
setType( $str,bool);
var_dump( $str);

    

整型 为4个字节2个字32位2.147e9
浮点型 为8个字节4个字64位

$float1=123.456;
$float2=2.147e9;
$int1=(int) $float1;
$int2=(int) $float3;
var_dump( $int1);
var_dump( $int2);
(int)(10*(0.7+0.1))  // 结果为7
--------
$amount = 19.99 * 100;
printf("%.13f",  $amount);
---------
$num=-1000;
print( $num."\n");
$i_str= sprintf("%u", $num);
print( $i_str."\n");
$i1= intval( $i_str);
print( $i1."\n");
$i2= intval( floatval( $i_str));

 print($i2."\n"); 

输出结果
-1000
4294966296
2147483647
-1000
整型=浮点型 注意:溢出/精度损失
5.字符串转换为整型和浮点

$a="100abc"; $a="a100bc"; 
$a="abc"; $a="100.123zbc" 
$a="100eabc"; $a="100e5abc" 

6.变量自动转换

$a=10;
$b="100abc";
$c= true;
$d=12.34;
$sum= $a+ $b+ $c+ $d;

 var_dump($sum); 


1.5与变量和类型有关的一些常用函数

  isset(); //测试变量是否存在,返回的值值如果是null,也表示空

  empty(); //判断一个变量是否为空, “” null 

     unset();

    setType();

    getType();

    var_dump();

变量类型测试函数:

  is_bool()

  is_int() is_integer() is_long()

  is_string()

  is_float() is_double()is_real()

  is_array()

  is_object()

  is_resource()

  is_null()

  is_scalar()

  is_numberic()

  is_callable()

第二章 常量

2.1常量的声明与使用

  1.常量是一个简单值的标识符  2.常量定义后不能再改变他的值,也不能使用unset()取消  3.常量可以不用理会变量范围的规则而在任何地方都可以定义和访问  4.声明常量使用define("常量名",值);  5.常量声明名在声明和使用都不使用"$"  6.常量名称习惯都使用大写  7.常量的值只能用标量类型(int, float, bool, string)  8.常量一定要在声明时就给值  9.defined("常量"); //查看某个常量是否存在

2.2预定义常量和魔术常量

   $_GET[];

   $_POST[];

   $_REQUEST[];

   $_COOKIE[];

   $_SESSION[];

   $_FILES[]; //获取上传表单数据

   $_SERVER[];

   $_ENV[];

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn