3.php变量类型

2018-06-15  本文已影响0人  Stago

变量

基本理解

可以存储可变数据的标识符——就是一个我们自己定义的名字。

变量名和其对应(存储)的值之间的关系示意图

变量的基本操作

1.赋值:$变量名 = 值;
2.取值:在需要一个数据值的场合,使用一个变量,就表示使用该变量的值(取得其值)。
echo $v1;
$v2 = $v1 + 2; //取得v1的值,并进行加法计算
f1($v1, 2, 3);
3.判断isset(变量名):
isset()判断一个变量“是否存在”,也包括如果变量中的“值”是null,会判断为“不存在”。
如果存在,就是true
如果不存在,就是false
empty()判断一个变量“是否是空的”:有多种情况都是“空的”:0, “”, “0”, false, null, array()
如果是空的,就是true
如果不是空的,就是false
4.删除unset(变量名):

变量命名规则

基本规则——保证程序的正确性
行业规则——保证程序的可读性

变量的传值方式

值传递
$v1  = 1;
$v2  = $v1;     //v2为1;
$v2 = 10;
echo  $v1;      //1
unset($v1);
isset($v2);     //???——true
引用传递
$m1 = 1;
$m2 = &$m1;     //引用传递,此时$m2也是1
$m2 = 10;
echo  $m1;      //10
unset($m1);
echo $m1;       //此行报错:变量m1不存在
isset($m2);     //???——true;
isset($m1);     //???——false

可变变量

$s123  = 100;
$v1 = “s123”;
echo  $$v1;     //100;怎么理解:$v1是要输出的这个变量的“名字”,即为“s123”,那么结果就是要输出$s123;
$k1 = “k2”;
$k2 = “k3”;
$k3 = 3;
echo   $$$k1

预定义变量

含义:代表网页客户端通过post方式所提交过来的数据!,是一个数组;
取得其中任何一项数据,其形式都是:$_POST[‘数据项名称’];
只有一种形式可以以post方式提交post数据:

<form  action=”目标文件.php”  method=”post”> ..... </form>

含义:代表网页客户端通过get方式所提交过来的数据!,也是一个数组;
取得其中任何一项数据,其形式都是:$_GET[‘数据项名称’];
有多种形式可以以gett方式提交get数据:

a:

 <form  action=”目标文件.php”  method=”get”> ..... </form>

b:

<a href =”目标文件.php?a=1&b=xyz&cc=cctv” >文字</a>

说明:?号后面通常称为“名值对”
c:

<script>  location.href = ”目标文件.php?a=1&b=xyz&cc=cctv” ;  </script>
d:<script>  location.assign( ”目标文件.php?a=1&b=xyz&cc=cctv” );  </script>

e:

<php  header(“location:目标文件.php?a=1&b=xyz&cc=cctv”);

代表客户端在一次请求中提交过来的get数据和post数据的“合集”。

代表一些客户端在一次请求中的浏览器端信息和服务器端信息。

代表我们自定定义的“全局变量”的另一份存储形式:即所有全局变量,都又存储到这个预定义常量中去了。
$v1 = 1; //全局变量;则此时就有了: $GLOBALS[‘v1’]; 其值为1;

常量

常量是相对于变量来说的:是一个其中存储的数据不会也不应该改变的“标识符”。
常量的使用,就2个方面:定义,取值。

// 常量定义语法1:
// define("常量名", "常量值");
define("PI","3.14");
define("AAA","abc");
//定义形式2:
//const  常量名 = 常量值;
const CC1 = 1234;
const CC2 = 'abcd';

也有两种形式:直接使用名字,或通过constant()函数取得其值;

//使用形式1: 直接使用其名字
echo "<br />常量PI的值是:" . PI;//注意,不能写在引号中echo "<br />常量AAA的值是:" . AAA;
$s1 = PI*3*3;// 求半径为3的圆面积
//使用形式2: 使用函数constant()获得一个常量的值:
//形式:constant("常量名");//注意:常量名是一个字符串
$s2 = constant("PI") * 3 * 3;
echo "<br />s1 = $s1, s2 = $s2";
echo "<br />”.AAA.constan("CC1").constant("CC2");

//取得常量值的灵活性语法:
$i = 1;
$c1 = "CC".$i;
echo "<br />常量 $c1的值为:"constant($c1);//输出1234

定义形式不同:
使用形式不同:常量无需$符号
可变程度不同:常量的值不可以改变,常量也不可以销毁
作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)
可用类型不同:常量只能存储标量类型(整数,浮点数,字符串,布尔)

echo  “v1的值为”  .  $v1;      //注意,该变量v1未定义过
echo  “C1的值为”  .  C1;       //注意,该常量C1未定义过

注意:在php中,当使用一个未定义的常量的时候,系统会直接将该常量当做“有值”的常量去使用,并且其值就是该常量名——虽然也会报错!

M_PI: 就是圆周率的常量值;
PHP_OS: 就是php运行所在的操作系统
PHP_VERSION:就是php的版本号
PHP_INT_MAX: php中的最大的整数值

FILE :代表当前网页文件的完整物理路径
DIR :代表当前网页文件所在的文件夹
LINE :代表当前这个常量名所在的”行号”

数据类型

8种数据类型

整数类型: int, integer
浮点数类型: float,double, real
字符串类型: string
布尔类型: bool, boolean

数组: array
对象: object

空类型: null 这种类型中,只有一个数据,那就是null
资源类型: resource

整数类型

整数类型的4种写法:

$n1 = 123;      //10进制数字写法
$n2 = 0123;     //8进制数字写法,实际n2中存储的数字比123小
$n3 = 0x123;        //16进制数字写法,实际n3中存储的数字比123大
$n4 = 0b1010;       //2进制数字写法(目前不学)

bin:2进制
oct:8进制
dec:10进制
hex:16进制

进制转换主要分2种情况:

1,10进制转换为其他3种进制:decbin(), decoct(), dechex();
2,其他3种进制,转换为10进制:

decbin(一个10进制数字):   结果返回的是该数字的2进制数字形式的字符串!!!
decoct(一个10进制数字):   结果返回的是该数字的8进制数字形式的字符串!!!
dechex(一个10进制数字):   结果返回的是该数字的16进制数字形式的字符串!!!

2,其他3种进制,转换为10进制:

bindec(一个2进制数字字符串): 结果返回的是该2进制数字字符串对应的10进制数字!!!
octdec(一个8进制数字字符串): 结果返回的是该8进制数字字符串对应的10进制数字!!!
hexdec(一个16进制数字字符串):    结果返回的是该16进制数字字符串对应的10进制数字!!!
对于输入的字符串中的字符,如果不是对应进制的数字,会被忽略。

浮点类型

1, 常规写法:带小数点。

$v1 = 123.456;

2, 科学计数法:带一个特殊符号“E”

$v1 = 123.456E2;        //含义为:123.456乘以10的2次方;
$v2 = 123.456E3;        //含义为:123.456乘以10的3次方,虽然结果是123456,但仍然是“浮点型”
$v3 = 123E4;            //含义为:123乘以10的4次方,还是浮点数。

1,所有数字,最终的表示形式,都是2进制!!!
2,大多数浮点数的2进制形式,不能完全表达准确,最终只能“以很高的精度接近理论值”
3,因此,浮点数比较是不可靠。

再从另一个角度证明浮点数的不准确性:



说明: php中输出其实是做了一定的处理之后的显示结果,而js的输出是该计算结果的“真实反映”。

那应该怎么办?
考虑实际应用所需的精度的情况下,去将要比较的浮点数,转换为整数之后再比较。
比如:
要求精度为3为小数,则都乘以1000,然后取整后比较;
要求精度为4为小数,则都乘以10000,然后取整后比较;
....


字符串

四种形式
形式1:双引号字符串:

$str1 = “字符串内容.....”;

形式2:单引号字符串:

$str2 = ‘字符串内容.....’;

形式3:双引号定界符字符串:

$str3 = <<<”标识符A”
字符串内容....
标识符A;

形式4:单引号定界符字符串:

$str4 = <<<’标识符B’
字符串内容...
标识符B;

布尔类型

单词是bool,boolean。
其只有2个数据:true,false;
布尔类型的一个常见应用情形是:对一个变量直接进行判断,比如if判断,示例如下:



这里的判断,永远是指:判断该变量(数据)“是否为真”。
对于这种情况,只有如下数据是被当做“假”(false):
0, 0.0, “”, “0”, null, array(), false, 还有一个是“未定义的变量”
其余都是真。

类型转换

自动转换:

在任何运算中,如果需要某种类型的数据,而给出的数据不是该类型,通常都会发生自动转换:将该类型转换为目标需要的类型。

比如:

octdec($x), bindec($x),  hexdec($x);    //这里就要求$x必须是字符串,如果不是,就会转换;
$v1 = 1 + “2”;      //此时也发生了自动转换。

形式:(目标类型)数据;
含义: 将该数据转换为设定的目标类型;

通常的转换目标类型有:
(int), (float), (string), (bool), (array), (object)
上述强制类型转换,并不改变该变量的本身数据或类型。
对应,有一个语法是直接改变改变本的数据(及类型):
settype( $变量名, “目标类型”);


var_dump():用于输出变量的“完整信息”,几乎只用于调试代码。
getType($变量名):获取该变量的类型名字,返回的是一个表示该类型名字的字符串,比如:“string”,“bool”,“double”,“int”
setType($变量名,“目标类型”):将该变量强制改变为目标类型;
isset(), empty(), unset();。。。。省略!
is_XX类型() 系列函数:判断某个数据是否为某种类型,有如下一些:
is_int($x);     判断$x是否是一个整数类型;
is_float($x);
is_string($x);
is_bool($x);
is_array($x);
is_object($x);
is_null($x);
is_numeric($x);     判断$x是否是一个数字!
is_scalar($x);      判断$x是否是一个“标量类型”
上一篇 下一篇

猜你喜欢

热点阅读