Fork me on 5号黯区

php基础-2

1.1 今日目标

  1. 理解常量的概念
  2. 掌握常量的使用方式
  3. 理解魔术常量的概念和应用
  4. 理解string类型中单引号和双引号的区别
  5. 掌握PHP中数组的访问方式;
  6. 理解PHP代码的执行解析过程;

1.2 常量

在整个运行过程中,固定不变的值

1.2.1 定义常量

1、用define()函数定义常量

define(常量名,值,[是否区别大小写])  true表示不区分大小写,默认不写是false,区分大小写
常量名前没有$符
常量名推荐使用大写

例题:

<?php
// 不区分大小写的常量名
define('NAME','tom');		//定义常量
define('PI',3.14,true);		
echo NAME,'<br>',Pi;		//<br />换行
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING;    // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting;   // Notice: Use of undefined constant greeting - assumed 'greeting' in E:\php_enviroment\PHPTutorial\WWW\1-demo.php on line 6 greeting

2、定义常量可以用特殊字符,但是在调用的时候必须用constant关键字调用

define('%-%','tom');
echo constant('%-%');		//通过constant获取特殊字符作为常量名的常量
>>>tom

3、判断常量是否定义,通过defined()判断常量是否已经定义

//因为常量重复定义会报错
define('NAME','tom');		//定义常量
define('NAME','cat');		//定义常量
>>>Notice: Constant NAME already defined in E:\php_enviroment\PHPTutorial\WWW\2-demo.php on line 3
    
// 所以需要先进行判断: defined()检查某常量是否存在,如果常量存在,则返回 TRUE,否则返回 FALSE。
var_dump(defined('name'));
>>>bool(false)
    
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()用来判断常量是否被定义

1.2.2 预定义常量

PHP预先定义好的常量

例题

echo PHP_VERSION,'<br>';		//PHP版本号
echo PHP_OS,'<br>';				//PHP操作系统
echo PHP_INT_MAX,'<br>';		//PHP中整型的最大值	

1.2.3 魔术常量

魔术常量它们的值随着它们在代码中的位置改变而改变

echo __LINE__,'<br>';		//获取当前行号
echo __FILE__,'<br>';		//文件的完整路径和文件名
echo __DIR__,'<br>';		//文件所在的目录

1.2.4常量是全局的

/*
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
以下实例演示了在函数内使用常量,即便常量定义在函数外也可以正常使用常量。
*/
<?php 
define('GREETING', '欢迎访问 Iron Man!');
function myTest(){
	echo GREETING;//尽管常量定义在函数外面,但好函内部仍然可以访问
	echo '<br>';
	echo '拿掉华东';
}
myTest();
?>
>>>欢迎访问 Iron Man!
拿掉华东

1.3 数据类型

数据类型有两种:强类型和弱类型

PHP是弱类型

1.3.1 基本类型(标量类型)

1、整型

存整数,PHP_INT_MAX获取整形最大值

PHP支持8、10、16机制的整数

<?php
$num1=10;		//十进制
$num2=010;		//八进制(数字前面加0)
$num3=0x10;		//十六进制(数字前面加0x)

echo $num1,'<br>';		//10
echo $num2,'<br>';		//8
echo $num3;				//16

进制转换

机制 缩写 单词
十进制 dec decimalist
二进制 bin binary
八进制 oct octonary
十六进制 hex hexdecimalist

例题

PHP提供了进制转换函数

echo decbin(123),'<br>';   //十进制转二进制
echo bindec(1111011),'<br>';	//二进制转十进制
echo dechex(123),'<br>';		//十进制转十六进制
echo hexdec('7b'),'<br>';		//十六进制转十进制
echo decoct(123);				//十进制转八进制

2、浮点型

浮点数在内存中保存的是近似值

浮点数不能参与比较, 有时候会算对,有时候会算错

// var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值
var_dump(0.9==(1-0.1));		//bool(true) 
>>>bool(true) 
echo '<br>';
var_dump(0.1==(1-0.9));		//bool(false) 
>>>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表示相等;bccomp()两个数字一样大,返回0,左边比右边大返回+1,右边比左边大,返回-1,不能比较字符串

提醒:如果一个整数超出了整形的范围,会自动的转成浮点型

3、布尔型

不能使用echo 和print输出布尔型,要使用var_dump()输出,

echo true 返回1;echo false 不会返回任何东西

$flag=false;
var_dump($flag);	//bool(false) 

4、字符串型

在PHP中单引号字符串和双引号字符串是有区别的

单引号字符串是真正的字符串

双引号字符串要解析字符串中的变量

例题

$name='tom';
echo '我的名字叫$name','<br>';	//我的名字叫$name
echo "我的名字叫$name",'<br>';	//我的名字叫tom

例题:{ }取变量值

$name='tom';
echo '$name是我的名字','<br>';	//$name是我的名字
echo '{$name}是我的名字','<br>';	//{$name}是我的名字
echo "{$name}是我的名字",'<br>';	//{}表示获取变量的值(tom是我的名字)
echo "${name}是我的名字",'<br>';	//$和{只要挨着一起就可以(tom是我的名字)

输出特殊字符

echo '毛主席说:\'上课不要睡觉\'','<br>';	//转义字符   毛主席说:'上课不要睡觉'
echo '文件保存在c:\\';   //文件保存在c:\

字符串定界符

一个字符串可以用 4 种方式表达:
单引号
双引号 // 上面已讲了两种,下面图片里有另外两种
heredoc 语法结构
nowdoc 语法结构(自 PHP 5.3.0 起)

<?php 
echo <<<poem
<strong>锄禾日当午</strong>
<em>汗滴禾下土</em>
<u>谁知盘中餐</u>
poem;//poem;必须紧靠左边(字符串定界符的结束符必须顶格写,前面不能有任何的空白字符),才有效,字符串以<<<标识符开头,以标识符:结尾,这中间的所有内容就是字符串
?>
输出:
    锄禾日当午(加粗) 汗滴禾下土(斜体) 谁知盘中餐(下划线)

1.3.2 复合类型

1、数组

在PHP中数组有两种形式,索引数组和关联数组

索引数组:用整数做下标,默认从0开始,后面依次加一

关联数组:用字符串做下标,通过=>符号将下标和值关联起来

例题:数组的声明

打印数组不能用echo,echo 用来输出一个或多个字符串,即数组的某个具体元素

输出数组用print_r()

<?php
//1、索引数组的声明
$stu=array('tom','berry','ketty');   //索引数组
print_r($stu);	//输出数组  Array ( [0] => tom [1] => berry [2] => ketty ) 
echo '<hr>';// //画了一条横线,其实就是现实html标签的效果
echo $stu[0],'<br>';	//tom
echo $stu[1],'<br>';	//berry
echo $stu[2],'<hr>';	//ketty
?>
-------------------------------------------
// var_dump():输出数据的详细信息,带有数据类型和数据长度
<?php 
$number = [123, 2, 3, 4, 5, '1', 'dada'];
print_r($number);
echo '<br>';
echo $number[0];
echo '<br>';
echo $number[5];
echo '<br>';
var_dump($number[0]);
echo '<br>';
var_dump($number[5]);
?>
>>>Array ( [0] => 123 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 1 [6] => dada )
123
1
int(123)
string(1) '1'
------------------------------------------
//2、关联数组 有点像python字典的键值对
$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
//echo $emp[1];错误
-------------------------------------------------------------------
$emp['blood'] = '100';
print_r($emp);
>>>Array ( [name] => 李白 [sex] => 男 [age] => 22 [blood] => 100 )

练习:写出数组的下标

$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中可以支持数组的赋值

//例题,两个数交换,切换版本至php7.2可以实现
$num1=10;
$num2=20;
[$num1,$num2]=[$num2,$num1];
echo $num1,'<br>',$num2;

获取数组的长度 - count() 函数

count() 函数用于返回数组的长度(元素的数量):

<?php 
    $cars=array("Volvo","BMW","Toyota"); 
	echo count($cars); 
?>
>>>3

遍历数值数组

<?php 
$number = array('123', 456, 'dmiadja', '哈士奇', 'Iron Man!', 789);
$number_length = count($number);

for($i = 0; $i < $number_length; $i++)
{
	echo $number[$i];
	echo '<br>';
}
?>
>>>
123
456
dmiadja
哈士奇
Iron Man!
789    

遍历关联数组

先讲一个 并置运算符:就是英文输入环境的句号(.)

// 并置运算符 (.) 用于把两个字符串值连接起来。
// php无论按多少空格,打印出来就一个
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
echo '<br>';
echo $txt1 . "哈士奇" . $txt2;
echo '<br>';
echo $txt1 . "+" . "哈哈哈" . $txt2;
?>
>>>
Hello world! What a nice day!
Hello world!哈士奇What a nice day!
Hello world!+哈哈哈What a nice day!
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)// x 和 x_value的名字自己取
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>
>>>Key=Peter, Value=35
Key=Ben, Value=37
Key=Joe, Value=43

二维数组的声明

<?php
$sites = array
(
    "runoob"=>array
    (
        "菜鸟教程",
        "http://www.runoob.com"
    ),
    "google"=>array
    (
        "Google 搜索",
        "http://www.google.com"
    ),
    "taobao"=>array
    (
        "淘宝",
        "http://www.taobao.com"
    )
);
//pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。<pre> 标签的一个常见应用就是用来表示计算机的源代码。
print("<pre>"); // 格式化输出数组
print_r($sites);
print("</pre>");
?>
//运行结果
Array
(
    [runoob] => Array
        (
            [0] => 菜鸟教程
            [1] => http://www.runoob.com
        )

    [google] => Array
        (
            [0] => Google 搜索
            [1] => http://www.google.com
        )

    [taobao] => Array
        (
            [0] => 淘宝
            [1] => http://www.taobao.com
        )
)
// 我们试着显示上面数组中的某个值:
echo $sites['runoob'][0] . '地址为:' . $sites['runoob'][1];
>>>菜鸟教程地址为:http://www.runoob.com

数组的排序

PHP - 数组排序函数
我们将介绍下列 PHP 数组排序函数:
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
---------------------------------------------
<?php
$numbers=array(4,6,2,22,11);
sort($numbers);// 其他几个函数用法都是这样
print_r($numbers);
?>
>>>Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 11 [4] => 22 )

多学一招:字符串可以通过数组的方式去调用

echo 'abc'[0],'<br>';		//a  
echo 'abc'[-1],'<br>';		//c,从右边开始取第一个  7.1开始支持

小结:

1、数组在内存中一段连续的空间

2、如果要保存同一类型的多个数据就使用数组

2、对象

对象在后面专门讲解(面向对象编程)

1.3.3 特殊类型

1、资源

2、null

提醒:在PHP中 null和NULL是一样的,不区分大小写

1.3.4 类型转换

1、自动类型转换:当提供的类型和需要的类型不一致的时候会自动进行类型转换

$num=10;
if($num){   //自动将数字转成布尔型
	echo 'aa';
}else{
	echo 'bb';
}
---------------------------------
echo '20'-10;	//自动的将字符串转成数字
echo '20' + 10; // 30

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) 
posted @ 2020-07-07 10:17  小萝卜特·唐尼  阅读(131)  评论(0编辑  收藏  举报