标准风格(推荐使用)
<?php
echo 'i am a boy!';
?>
print_r
函数可以把变量的信息以易读的格式输出。当变量是字符串、整数这类简单类型时,会直接输出其值;当变量是数组或者对象时,会以递归的方式输出其内部结构。
一.变量的命名规则
-
变量必须以$开头,$符不是变量的一部分,仅表示后面的标识符是变量名。
-
除了$以外,以字母、下划线开头,后面跟着数字、字母、下划线
-
变量名区分大小写,$aa和$Aa是两个空间
$a 合法 $a1 合法 $1a 不合法 $_1a 合法 #PHP语句必须以分号结尾 <?php $a=10; $name='Tom'; ?>
变量名可以变,将变量名存储在另外一个变量中:
<?php
$a=10;
$b='a';
echo $$b; //10
二、变量传递
变量的传递有值传递和地址传递(引用传递)
<?php
//值传递
$num1=10; //将10付给$num1
$num2=$num1; //将$num1的值付给$num2
$num2=20; //更改$num2
echo $num1; //10
//地址传递
$num1=10; //将10付给$num1
$num2=&$num1; //将$num1的地址付给$num2
$num2=20; //更改$num2
echo $num1; //20
小结:
1、参数的传递有两种,值传递和地址传递
2、&表示获取变量的地址
3、值传递中,一个变量变了,另一个变量没有影响,因为是两个空间
4、地址传递中,一个变量变了,另一个也变了,因为两个变量指向同一个空间
三、销毁变量
用unset()来销毁变量,销毁的是变量名,变量值由PHP垃圾回收机制销毁
<?php
$num1=10;
$num2=&$num1;
unset($num1); //销毁的是变量名
echo $num2; //10
没有变量引用的值是垃圾。
四、定义常量
1.用define()函数定义常量:
define(常量名,值,[是否区别大小写]) true表示不区分大小写,默认是false
常量名前没有$符
常量名推荐使用大写
<?php
define('NAME','tom'); //定义常量
define('PI',3.14,true); //定义常量,不区分大小写
echo NAME,'<br>',Pi;
//true表示不区分大小写,默认是区分大小写的。
2.定义常量可以用特殊字符,但是在调用的时候必须用constant
关键字调用
define('%-%','tom');
echo constant('%-%'); //通过constant获取特殊字符作为常量名的常量
3、判断常量是否定义,通过defined()判断常量是否已经定义
if(!defined('NAME')){
define('NAME','berry');
}
echo NAME; //berry
4、还可以使用const关键字定义常量
const NAME='tom';
echo NAME; //tom
小结:
1、定义常量有两种方式,define()和const
2、常量在整个运行过程中值保持不变,常量不能重新定义
3、使用constant获取特殊字符做的常量名的值
4、defined()用来判断常量是否被定义
五、预定义常量
PHP预先定义好的常量
echo PHP_VERSION,'<br>'; //PHP版本号
echo PHP_OS,'<br>'; //PHP操作系统
echo PHP_INT_MAX,'<br>'; //PHP中整型的最大值
六、魔术常量
魔术常量它们的值随着它们在代码中的位置改变而改变
echo __LINE__,'<br>'; //获取当前行号
echo __FILE__,'<br>'; //文件的完整路径和文件名
echo __DIR__,'<br>'; //文件所在的目录
七、数据类型
数据类型有两种:强类型和弱类型
PHP是弱类型
浮点型:
浮点数在内存中保存的是近似值
浮点数不能参与比较
var_dump(0.9==(1-0.1)); //bool(true)
echo '<br>';
var_dump(0.1==(1-0.9)); //bool(false)
如果浮点数要比较,必须确定比较的位数
var_dump(0.9==(1-0.1)); //bool(true)
echo '<br>';
var_dump(0.1==(1-0.9)); //bool(false)
echo '<br>';
var_dump(bccomp(0.1,1-0.9,5)); //比较小数点后面5位 int(0) 0表示相等
提醒:如果一个整数超出了整形的范围,会自动的转成浮点型
布尔型
不能使用echo 和print输出布尔型,要使用var_dump()输出
$flag=false;
var_dump($flag); //bool(false)
字符串型
在PHP中单引号字符串和双引号字符串是有区别的
单引号字符串是真正的字符串
双引号字符串要解析字符串中的变量
例题
$name='tom';
echo '我的名字叫$name','<br>'; //我的名字叫$name
echo "我的名字叫$name",'<br>'; //我的名字叫tom
例题:{ }取变量值
$name='tom';
echo '$name是我的名字','<br>'; //$name是我的名字
echo "{$name}是我的名字",'<br>'; //{}表示获取变量的值(tom是我的名字)
echo "${name}是我的名字",'<br>'; //$和{只要挨着一起就可以(tom是我的名字)
输出特殊字符
echo '毛主席说:\'上课不要睡觉\'','<br>'; //转义字符 毛主席说:'上课不要睡觉'
echo '文件保存在c:\\'; //文件保存在c:\
字符串定界符
1、有<<<开头,后面跟的是标识符
2、字符串定界符的结束符必须顶格写,前面不能有任何的空白字符
3、字符串定界符分为两种,heredoc(双引号),nowdoc(单引号)
复合类型
1、数组
在PHP中数组有两种形式,索引数组和关联数组
索引数组:用整数做下标,默认从0开始,后面依次加一
关联数组:用字符串做下标,通过=>符号将下标和值关联起来
例题:数组的声明
<?php
//1、索引数组的声明
$stu=array('tom','berry','ketty'); //索引数组
print_r($stu); //输出数组 Array ( [0] => tom [1] => berry [2] => ketty )
echo '<hr>';
echo $stu[0],'<br>'; //tom
echo $stu[1],'<br>'; //berry
echo $stu[2],'<hr>'; //ketty
------------------------------------------
//2、关联数组
$emp=array('name'=>'李白','sex'=>'男','age'=>22);
print_r($emp); //Array ( [name] => 李白 [sex] => 男 [age] => 22 )
echo '<hr>';
echo $emp['name'],'<br>'; //李白
echo $emp['sex'],'<br>'; //男
echo $emp['age']; //22
练习:写出数组的下标
$array=array(1=>'a','b','c','d');
print_r($array); //Array ( [1] => a [2] => b [3] => c [4] => d )
echo '<br>';
--------------------------
$array=array('a',2=>'b','c',5=>'d');
print_r($array); //Array ( [0] => a [2] => b [3] => c [5] => d )
echo '<br>';
----------------------------
$array=array('a','name'=>'b','c','sex'=>'d');
print_r($array); //Array ( [0] => a [name] => b [1] => c [sex] => d )
echo '<br>';
------------------------------
$array=array(1=>'a',1=>'b',1=>'c','d');
print_r($array); //Array ( [1] => c [2] => d )
数组的下标只能是正整数和字符串
思考如下下标
$stu[true]='tom'; //转成1
$stu[false]='berry'; //转成0
$stu[12.9]='aa'; //转成12(取整数部分)
$stu[-10]='bb'; //负数可以做下标
$stu[-12.3]='cc'; //取负整数
$stu['10']='dd'; //字符串数字转成数字
$stu['']='ee'; //空字符串也可以做下标
$stu[null]='ff'; //转成空字符串做下标
print_r($stu);
短数组语法,可以直接通过中括号声明数组
$stu=['tom','berry','ketty'];
print_r($stu); //Array ( [0] => tom [1] => berry [2] => ketty )
多学一招:在PHP7.1中可以支持数组的赋值
//例题,两个数交换
$num1=10;
$num2=20;
[$num1,$num2]=[$num2,$num1];
echo $num1,'<br>',$num2;
二维数组的声明
$stu=[
['name'=>'tom','sex'=>'男','age'=>22],
['name'=>'berry','sex'=>'女','age'=>23]
];
echo '<pre>';
print_r($stu);
//运行结果
Array
(
[0] => Array
(
[name] => tom
[sex] => 男
[age] => 22
)
[1] => Array
(
[name] => berry
[sex] => 女
[age] => 23
)
)
多学一招:字符串可以通过数组的方式去调用
echo 'abc'[0],'<br>'; //a
echo 'abc'[-1],'<br>'; //c,从右边开始取第一个 7.1开始支持
小结:
1、数组在内存中一段连续的空间
2、如果要保存同一类型的多个数据就使用数组
特殊类型
1、资源
2、null
提醒:在PHP中 null和NULL是一样的,不区分大小写
类型转换
1、自动类型转换:当提供的类型和需要的类型不一致的时候会自动进行类型转换
$num=10;
if($num){ //自动将数字转成布尔型
echo 'aa';
}else{
echo 'bb';
}
---------------------------------
echo '20'-10; //自动的将字符串转成数字
2、强制类型转换
语法:(数据类型)数据
<?php
$num1='12';
var_dump($num1,(int)$num1,(float)$num1); //string(2) "12" int(12) float(12)
其他类型和布尔之间的转换
规则:0、空为假,非0非空为真
<?php
var_dump((bool)'abc'); echo '<br>'; //bool(true)
var_dump((bool)''); echo '<br>'; //bool(false)
var_dump((bool)'0'); echo '<br>'; //bool(false)
var_dump((bool)'0.0'); echo '<br>'; //bool(true)
var_dump((bool)'00'); echo '<br>'; //bool(true)
var_dump((bool)'false'); echo '<br>'; //bool(true)
var_dump((bool)'null'); echo '<br>'; //bool(true)
var_dump((bool)1); echo '<br>'; //bool(true)
var_dump((bool)0); echo '<br>'; //bool(false)
var_dump((bool)-10); echo '<br>'; //bool(true)
var_dump((bool)0.0); echo '<br>'; //bool(false)
var_dump((bool)array()); echo '<br>'; //bool(false)
var_dump((bool)array(1)); echo '<br>'; //bool(true)
var_dump((bool)array(false)); echo '<br>';//bool(true)
var_dump((bool)null); echo '<br>'; //bool(false)