PHP学习基础第一节

0.567字数 11070阅读 2184

一、php可以做什么

php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。

php是一门后台编程语言,是目前比较主流的后台编程语言。

认识一下PHP及其功能。

1、运行在服务器端:学会了PHP,就可以指挥服务器给你干活,甚至是搞破坏^_^(千万不能真这么做咯),WEB网站的大部分数据都是存储在服务器端的,PHP就是用来处理这些存储在服务器的数据的(功能强大吧)。

2、跨平台:服务器可以是多种平台的服务器,比如Linux、Windows、Unix,你都可以指挥(不用怕只能指挥一种服务器啦吧)。

3、脚本语言:它是通过编写脚本,也就是一行行的计算机指令(也可以理解为特定的英文单词),来指挥服务器来工作的,因此,在编写PHP的过程其实就是与老外(服务器成老外啦)交流的过程,交流的语言就是PHP。

4、免费:免费使用(天下还真有免费的午餐)。

如果出现乱码,解决乱码需要加head头:header("Content-type:text/html;charset=utf-8");

认识PHP代码标识

想在页面中编写PHP​代码非常容易,如下面代码:

<?php

      echo "想学习php吗?来慕课网吧";

?>

就像你可以编写JavaScript脚本语言需要写在<script></script>标签之间一样,你可以在页面中编写PHP代码写在<?php  ?>标签之间,但注意后面的?>是可以省略的。

输出php的版本    echo    PHP_VERSION

输出运行php的系统名称    echo    PHP_OS

查看php环境的函数      echo    phpinfo()

阻止程序执行die,一般用来做调试

//die;

//@die($a);

阻止程序执行exit,一般用来做调试

//exit();

//@exit($a);

php主要输出方式的区别:

1、echo

echo() 实际上不是一个函数,是php语句,因此您无需对其使用括号。不过,如果您希望向 echo() 传递一个以上的参数,

那么使用括号会发生解析错误。而且echo是返回void的,并不返回值,所以不能使用它来赋值。

<?php

$a = echo("words"); // 错误!不能用来赋值

echo  "words"; // 55nav

echo  ("words"); // 55nav

echo   ("apple","bear"); //发生错误,有括号不能传递多个参数

echo    "alice","bill","cart", "daring";  // 不用括号的时候可以用逗号隔开多个值, 会输出alicebillcartdaring  不管是否换行,最终显示都是为一行

$fistname="alice";

echo "$fistname com"; // 如果 $firstname = "alice", 则会输出 alice com.

echo '$firstname com'; // 由于使用单引号,所以不会输出$firstname的值,而是输出 $firstname com

?>

2.print_r 函数

print_r函数打印关于变量的易于理解的信息。

如果变量是string , integer or float , 将会直接输出其值,如果变量是一个数组,则会输出一个格式化后的数组,便于阅读,也就是有key和value对应的那种格式。对于object对象类同。print_r有两个参数,第一个是变量,第二个可设为true,如果设为true,则会返回字符串,否则返回布尔值TRUE。

<?php

print_r($arr);//直接打印数组$arr

$a="alice";

$c=print_r($a);

echo  $c;//$c的值是TRUE

$c=print_r($a,true);

echo       $c;           //$c的值是字符串alice

?>

3.var_dump函数

功能: 输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。

var_dump($a);


二、php中的echo语句

echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来)。
注意echo关键字与字符串之间至少要有一个空格。

<?php echo "hello world!";?>

PHP-计算表达式

不同于HTML和CSS,在php中我们可以做计算,比如我们写入echo 12*3计算机会计算出结果36。如下代码:

<?php echo 12*3;?>

PHP-字符串

一个字符串是用双引号括起来的一个词或一个句字,你可以用PHP语言输出把这个字符串输出,像这样:

<?php echo "hello world!";?>

也可以用单引号括起来.

可以把两个字符用连接符连接起来,像这样:

<?php echo "Hi,"."imooc!";?>

连接符可以连接多个字符串,上面的例子就是把一个字符串拆分为二个小字符串,然后用一个连接符连起来。在php中字符串连接符是用点(.)来表示的,这一点比较特殊,其它语言中是用加号(+)来表示的,比如:JavaScirpt、Asp、C。

PHP语句结束符

有的小伙伴们是不是已经注意在每一条PHP代码行结尾处都会有一个分号;。对的,这点注意,在PHP编程中需要在每条语句的末尾加入分号;。但要注意,分号;一定在半角状态下输入噢。

注释

在PHP中也有注释语句:用双斜杠(//)来表示。其它语言中,Html中使用,CSS中使用/*注释语句*/

注释语句可以在PHP程序的任意位置(但注释语句一定要写在之间)。


三、变量

1.什么是变量

变量是用于存储值的,我们命令服务器去干活的时候,往往需要产生一些数据,需要临时性存放起来,方便取用。我们也可以理解为,变量就像一个购物袋,我们可以用来装苹果、榴莲(当然也可以用来装玫瑰),需要注意的是,一般情况下一个变量只能装一个(不要太贪心)值,除非是复合变量(后面变量类型时会介绍),当我们放进去一个苹果后,再放进榴莲的时候,苹果就被替换掉,再放入香蕉,那么榴莲就被替换了。

2.如何定义变量

定义变量就是向服务器的内存申请空间,用来存储数据。这时候我们就需要用到变量名和变量值.

<?php

$var _name = "苹果";

$n = 10;

?>

解释一下,在“=”左边的是变量名,右边的是变量值。完成定义变量后,需要一个;告诉服务器这行指令已经结束。其中变量名必须通过$符号标识,“=”可不是我们平常所说的等号哦,在PHP中,=是赋值运算符;在这里,var_name是变量名,“苹果”是变量值,它是一个字符串;n是变量名,10是变量值,它是一个整型。

3.变量名的命名规则

变量名除了需要“$”进行标识外,还有一些规则需要遵守。变量名的命名规则主要有三条:

①变量名必须以字母或下划线“-”开头,数字不能开头。如”$_name”,”$name” ,”$name2”等

②变量名只能由字母、数字、以及“_”组成,还能包含汉字。如”$_qq”,”$qq308” ,”$my_apple”,“比如"$name我等”,但是”$name*”是不对的。

③变量名不允许包含空格。当变量名由多个单词组成,建议使用下划线“-”进分隔比如 $my_apple),俗称下划线法,或者以大写字母开头比如 $myApple,俗称骆驼式命名法(也称驼峰命名法)。

特别需要注意的是,在PHP中变量名是区分大小写的,如“$my_book”与“$my_Book”代表两个不同的变量。

4.变量的数据类型

在变量中,由于变量占用的空间单元不一样(占的地盘大小不一样),也分成几种数据类型。

我们可以通过使用“memory_get_usage”获取当前PHP消耗的内存。

可以对比一下内存消耗

<?php

echo $m1 = memory_get_usage(); //初始化消耗内存

echo "<br/>";

$var_string = "123";

echo $m2 = memory_get_usage()-$m1; //字符串消耗内存

echo "<br/>"; 

$n=123;

echo $m3 = memory_get_usage()-$m1-$m2; //整型消耗内存

echo "<br/>"; 

$f=123.00;

echo $m4 = memory_get_usage()-$m1-$m2-$m3;//浮点型消耗内存 

echo "<br/>"; 

$var_array = array("123");

echo $m5 = memory_get_usage()-$m1-$m2-$m3-$m4; //数组消耗内存

?>

gettype()返回变量的类型,共有8个可能的值string、integer、float、boolean、array、object、null、unknown

is_type()查看变量是否属于某个类型,如果是,返回TRUE,否则,返回FALSE

$arr = array(1);

echo is_array($arr);

$num = 5;

echo is_int($num);

is_array -- 检测变量是否是数组

is_bool --  检测变量是否是布尔型

is_callable --  检测参数是否为合法的可调用结构

is_double -- is_float() 的别名

is_float -- 检测变量是否是浮点型

is_int -- 检测变量是否是整数

is_integer -- is_int() 的别名

is_long -- is_int() 的别名

is_null --  检测变量是否为 NULL

is_numeric --  检测变量是否为数字或数字字符串

is_object -- 检测变量是否是一个对象

is_real -- is_float() 的别名

is_resource --  检测变量是否为资源类型

is_scalar --  检测变量是否是一个标量

is_string -- 检测变量是否是字符串


var_dump()获取变量的值和类型的详细信息

$str = ‘hello’;

var_dump($str);

$arr = array(‘A’, ‘B’, ‘C’);

var_dump($arr);

在php中,支持8种原始类型,其中包括四种标量类型、两种复合类型和两种特殊类型。php是一门松散类型的语言,不必向php声明变量的数据类型。php会自动把变量转换为自动的数据类型。

<?php

$string="就是就是"; //定义一个字符串“就是就是”

var_dump($string); 

echo "<br/>";

$string="9494";//把它变成整型“9494”

var_dump($string); //通过“var_dump”函数,输出数据类型

 echo "<br/>";

?>

输出结果:string(12) "就是就是"               int(9494)

我们可以发现, 这个变量自动就从原来的字符串转换成了整型咯。

5.PHP标量类型—布尔类型

布尔类型(boolean):只有两个值,一个是TRUE,另一个是FALSE,可以理解为是或否。它不区分大小写。主要用在条件结构中。需要注意的是,当我们用echo指令输出布尔类型时,如果是true则输出的是1,false则什么也不输出。我们可以使用var_dump函数,获取它真正的数据类型。

6.PHP标量类型—整型

整型(integer):类似于常见的整数。它可以用十进制、八进制、十六进制指定。十进制就是日常使用的数字;八进制,数字前必须加上“0”(阿拉伯数字0);十六进制,数字前必须加“0x”(阿拉伯数字0)。如:

<?php

$data_int = 1234;  // 十进制数

$data_int = -567;    // 一个负数

$data_int = 0123;    // 八进制数(等于十进制的 83)

$data_int = 0x1a;    // 十六进制数(等于十进制的 26)

?>

7.PHP标量类型—浮点型

浮点型(浮点数、双精度数或实数),也就是通常说的小数,可以用小数点或者科学计数法表示。科学计数法可以使用小写的e,也可以使用大写的E。

<?php

echo $num_float1 = 1.234;    //小数点,输出结果1.234

echo $num_float2 = 1.2e3;    //科学计数法,小写e,输出结果1200

echo $num_float3 = 7.0E-3;    //科学计数法,大写E,输出结果0.007

?>

8.PHP标量类型—字符串

字符串是由一系列字符组成,在PHP中,字符和字节一样,也就是说,一共有256种不同字符的可能性。

字符串型可以用三种方法定义:单引号形式双引号形式Heredoc结构形式

<?php

$str_string1='我是字符串1';

$str_string2="我是字符串2";

echo $str_string1;

echo "<br/>";

echo $str_string2;

?>

当你的字符串中包含引号的时候,我们怎么办?

<?php

$str_string1 = '甲问:"你在哪里学的PHP?"';       //单引号中嵌入双引号

$str_string2 = "乙毫不犹豫地回答:'当然是慕课网咯!'";      //双引号中嵌入单引号

$str_string3 = '甲问:\'能告诉我网址吗?\'';            //单引号中嵌入单引号,使用转义符“\”

$str_string4 = "乙答道:\"www.imooc.com\"";        //双引号中嵌入双引号,使用转义符“\”

echo $str_string1;

echo $str_string2;

echo $str_string3;

echo $str_string4;

?>

当引号遇到美元咋办?这里的美元可不是真正的美元,而是用美元符号标识的变量。

字符串转义

\n        换行

\r          回车

\t          水平制表符,tab键

\\           反斜杠

\$          美元符

\”           双引号

当双引号中包含变量时,变量会与双引号中的内容连接在一起;双引号可以解析变量,如果想明确的指定名字的结束,可以用花括号{ }把变量名括起来。echo "He drank some {$beer}s";

当单引号中包含变量时,变量会被当做字符串输出。

<?php

$love = "I love you!"; 

$string1 = "慕课网,$love";

$string2 = '慕课网,$love';

echo $string1;                    //输出:慕课网,I  love you!

echo "<br/>";

echo $string2;                    //输出:慕课网,$love

?>

当我的字符串很长怎么办?

我们可以使用Heredoc结构形式的方法来解决该问题,首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串。

<?php

$string1=<<<GOD

我有一只小毛驴,我从来也不骑。

有一天我心血来潮,骑着去赶集。

我手里拿着小皮鞭,我心里正得意。

不知怎么哗啦啦啦啦,我摔了一身泥.

GOD;

echo $string1;

?>

在赋值符号后,输入定界符“<<<”,接着是标识符,你可以用你的女神作为标识符“GOD”,如第2行,也可以使用你喜欢的狗狗,“DOG”作为标识符,但是,结尾处的标识符也必须是一样的。此外,在结尾的一行,如第7行,一定要另起一行,并且此行除了“GOD”,并以“;”号结束之外,不能有任何其他字符,前后都不能有,包括空格,否则会出现错误的哦。切记切记哦。

定界符也可以解析变量,如果想明确的指定名字的结束,可以用花括号{ }把变量名括起来。

9.PHP第一种特殊类型—资源

资源(resource):资源是由专门的函数来建立和使用的,例如打开文件、数据连接、图形画布。我们可以对资源进行操作(创建、使用和释放)。任何资源,在不需要的时候应该被及时释放。如果我们忘记了释放资源,系统自动启用垃圾回收机制,在页面执行完毕之后回收资源,以避免内存被消耗殆尽。

<?php

$file=fopen("f.txt","r");  //打开文件

$con=mysql_connect("localhost","root","root");  //连接数据库

$img=imagecreate(100,100);//图形画布

?>

//偷窥一个小文件,假设服务器上有个文件为“f.txt”,这时候,我们就需要用到资源这种特殊的数据类型。

<?php

//首先采用“fopen”函数打开文件,得到返回值的就是资源类型。

$file_handle = fopen("/data/webroot/resource/php/f.txt","r");

if ($file_handle){   

 //接着采用while循环(后面语言结构语句中的循环结构会详细介绍)一行行地读取文件,然后输出每行的文字    

while (!feof($file_handle)) { //判断是否到最后一行       

 $line = fgets($file_handle); //读取一行文本      

  echo $line; //输出一行文本        

echo "<br/>"; //换行  

  }

}

fclose($file_handle);//关闭文件?>

file handle叫做文件句柄
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。

fopen() 函数打开文件或者 URL。

如果打开失败,本函数返回 FALSE。

语法:fopen(filename,mode,include_path,context)

filename必需。规定要打开的文件或 URL。

mode必需。规定要求到该文件/流的访问类型。可能的值见下表。

include_path可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。

context可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

mode 参数的可能的值:

"r"只读方式打开,将文件指针指向文件头。

"r+"读写方式打开,将文件指针指向文件头。

"w"写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"w+"读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"a"写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"a+"读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"x"创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x+"创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

注释:不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。

Windows 下提供了一个文本转换标记("t")可以透明地将 \n 转换为 \r\n。与此对应还可以使用 "b" 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 "b" 或者用 "t" 作为 mode 参数的最后一个字符。

默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了

\n 作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用 "t"。在所有其它情况下使用

"b"。

在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。

注释:为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 "b" 标记。

注释:再一次,为移植性考虑,强烈建议你重写那些依赖于 "t" 模式的代码使其使用正确的行结束符并改成 "b" 模式。

feof(fp) 函数检测是否已到达文件末尾 (eof)。

有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。

fgets() 函数从文件指针中读取一行。

语法:fgets(file,length)

file必需。规定要读取的文件。

length可选。规定要读取的字节数。默认是 1024 字节。

file指向的文件中读取一行并返回长度最多为length- 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了length- 1 字节后停止(要看先碰到那一种情况)。如果没有指定length,则默认为 1K,或者说 1024 字节。若失败,则返回 false。

注释:length参数从 PHP 4.2.0 起成为可选项,如果忽略,则行的长度被假定为 1024 字节。从 PHP 4.3 开始,忽略掉length将继续从流中读取数据直到行结束。如果文件中的大多数行都大于 8 KB,则在脚本中指定最大行的长度在利用资源上更为有效。

注释:从 PHP 4.3 开始本函数可以安全用于二进制文件。早期的版本则不行。

注释:如果碰到 PHP 在读取文件时不能识别 Macintosh 文件的行结束符,可以激活 auto_detect_line_endings 运行时配置选项。

fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。与fgets()相同,不同的是 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。

语法:fgetss(file,length,tags)

file必需。规定要读取的文件。

length可选。规定要读取的字节数。默认是 1024 字节。该参数在 PHP 5 之前是必需的。

tags可选。规定不会被删除的标签。

可以用可选的第三个参数tags指定哪些标记不被去掉。若失败,则返回 false。

<?php

$file = fopen("test.htm","r");

echo fgetss($file,1024,"<p>,<b>");

fclose($file);

?>

fclose() 函数关闭一个打开文件。

语法:fclose(file)

file必需。规定要关闭的文件。

file参数是一个文件指针。fclose() 函数关闭该指针指向的文件。如果成功则返回 true,否则返回 false。文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。

10、PHP第二种特殊类型—空类型

NULL(NULL):NULL是空类型,对大小写不敏感,NULL类型只有一个取值,表示一个变量没有值,当被赋值为NULL,或者尚未被赋值,或者被unset(),这三种情况下变量被认为为NULL。

<?php

error_reporting(0);                    //禁止显示PHP警告提示

$var;                                        //为变量未赋值

var_dump($var);                     //NULL

$var1=null;                              //将null赋值给变量$var1

var_dump($var1);                      //NULL

$var2=NULL;                           //将NULL赋值给变量$var2

var_dump( $var2);                    //NULL

$var3 = "节日快乐!";

unset($var3);                             //将变量$var3注销定义

var_dump($var3);                    //NULL

?>

11.超全局变量

php提供了很多预定义的变量,用于提供大量与环境有关的信息。

(1)$_SERVER服务器变量,该全局变量包含着服务器和客户端配置及当前请求环境的有关信息。

print_r  ($_SERVER)

$_SERVER['SERVER_NAME']:当前运行脚本所在的服务器的主机名

$_SERVER['REMOTE_ADDR'] :客户端IP地址

$_SERVER['REQUEST_URI']:URL的路径部分

$_SERVER['HTTP_USER_AGENT'] :操作系统和浏览器的有关信息

(2)$_GET  该变量包含使用GET方法传递的有关信息

(3)$_POST该变量包含使用POST方法传递的参数的有关信息。

(4)$_REQUEST该变量记录着通过各种输入方法传递给脚本的变量,如GET、POST,但不要用这个超级全局变量,因为它不安全而且速度比较慢。

(5)$_COOKIE    cookie变量数组

(6)$_SESSION   会话变量数组

(7)$_FILES  与上传文件有关的变量数组

(8)$_ENV    环境变量数组

(9)$GLOBALS  所有全局变量数组

12.empty()函数

empty()函数是用来测试变量是否已经配置,判断值为否为空。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。这就是陷阱。0为空。

如: 假设 $value = 0; 则empty($value)=false

13.isset()函数

isset()函数 一般用来检测变量是否设置.若变量不存在则返回 FALSE。若变量存在且其值为NULL,也返回 FALSE。若变量存在且值不为NULL,则返回 TURE。

简单来说就是,有值返回true,没有值返回false,0不是空,0也是表示有值

使用 unset() 释放变量之后,它将不再是 isset()。

PHP函数isset()只能用于变量,传递任何其它参数都将造成解析错误。


四、常量

什么是常量?常量可以理解为值不变的量(如圆周率)。或者是常量值被定义后,在脚本的其他任何地方都不可以被改变。php中的常量分为自定义常量和系统常量。

自定义常量是根据我们开发的需要,而定义的常量,它通过使用PHP中的函数define()定义。

define()函数的语法格式为:

bool define(string $constant_name, mixed $value[, $case_sensitive = true])

它有3个参数:

第一个参数“constant_name”为必选参数,常量名称,即标志符,常量的命名规则与变量的一致,但是要注意哦,它可不带美元符号哦。第二个参数“value”为必选参数,它是常量的值。第三个参数“case_sensitive”为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。

(注: string表示参数类型为字符串类型,mixed表示参数类型可以接受为多种不同的类型,case_sensitive = true表示默认为布尔类型TRUE)

(通常常量都全用大写)

//举个栗子,将圆周率定义为常量“PI”

<?php

$p = "PII";

define("PI",3.14);

define($p,3.14);

echo PI;                  //3.14

echo "<br/>";

echo PII;                //3.14

?>

常量的作用

常量主要功效是可以避免重复定义,篡改变量值。在我们进行团队开发时,或者代码量很大的时候,对于一些第一次定义后不改变的量,如果我们使用变量,在不知情的情况下,使用同一变量名时,变量值就会被替换掉,从而会引发服务器执行错误的任务。

此外,使用常量还能提高代码的可维护性。如果由于某些原因,常量的值需要变更时候,我们只需要修改一个地方。例如在做计算中,起初我们取圆周率为3.14,于是很多计算中我们都使用3.14进行计算,当要求计算精度提高,圆周率需要取3.142的时候,我们不得不修改所有使用3.14的代码,倘若代码量比较多时,不仅工作量大,还可能遗漏。

<?php

define("PI",3.14);

$r=3;

echo "面积为:".(PI*$r*$r)."<br/>";

echo "周长为:".(2*PI*$r)."<br/>";

?>

系统常量

系统常量是php已经定义好的常量,我们可以直接拿来使用,常见的系统常量有:

(1)__FILE__ :php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

(2)__LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。

(3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

(4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。

<?php

echo _FILE_;

echo _LINE_;

echo PHP_VERSION;

echo PHP_OS;

?>

常量如何取值

获取常量值的有两种方法取值。第一种是使用常量名直接获取值;例如计算圆周率的面积,如下(“*”是运算符,相当于乘号,后面部分的小节会介绍):

<?php

define("PI",3.14);

$r=1;

$area =PI*$r*$r;                      //计算圆的面积

?>

第二种是使用constant()函数。它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,在使用上要灵活、方便,其语法格式如下:

mixed constant(string constant_name)

第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)

//举个栗子:

<?php

$p="";

//定义圆周率的两种取值

define("PI1",3.14);

define("PI2",3.142);

//定义值的精度

$height = "中";

//根据精度返回常量名,将常量变成了一个可变的常量

if($height == "中"){

$p = "PI1";

}else if($height == "低"){

$p = "PI2";

}

$r=1;

$area= constant($p)*$r*$r;

echo $area;

?>

如何判断常量是否被定义

如果常量被重复定义以后,PHP解析器会发出“Constant XXX already defined”的警告,提醒我们该常量已经被定义过。那么,在团队开发,或代码量很大的情况下,我们如何去判定一个常量是否被定义呢?

defined()函数可以帮助我们判断一个常量是否已经定义,其语法格式为:

bool defined(string constants_name)

它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)

<?php

define("PI1",3.14);

$p = "PI1";

$is1 = defined($p);

$is2 = defined("PI2");

var_dump($is1);           //bool(true)

var_dump($is2);           //bool(false)

?>

内置常量

PHP_OS       php所在操作系统的名称

PHP_VERSION  当前的php的版本号

魔术常量(下面都是两个下划线额)

__LINE__   文件中的当前行号

echo     __LINE__;

__FILE__    文件的完整路径和文件名

echo    __FILE__;

__FUNCTION__   函数名称

function    test(){

echo     __FUNCTION__;

}

test();

__CLASS__   类的名称

__METHOD__   类的方法名

class      Test{

function    test1(){

echo    __CLASS__;

echo   "<br/>";

echo    __METHOD__;

}

}

$newTest=new    Test();//将类实例化

$newTest->test1();//调用


五、php中常用的运算符

什么是运算符?运算符是告诉PHP做相关运算的标识符号。例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算。

PHP中的运算符有哪些?PHP运算符一般分为算术运算符、赋值运算符、比较运算符、三元运算符、逻辑运算符、字符串连接运算符、错误控制运算符。

算术运算符主要是用于进行算术运算的。

在php中的常用的算术运算符:+       -      *        /       %

赋值运算符

PHP的赋值运算符有两种,分别是:

(1)“=”:把右边表达式的值赋给左边的运算数。它将右边表达式值复制一份,交给左边的运算数。换而言之,首先给左边的运算数申请了一块内存,然后把复制的值放到这个内存中。

(2)“&”:引用赋值,意味着两个变量都指向同一个数据。它将使两个变量共享一块内存,如果这个内存存储的数据变了,那么两个变量的值都会发生变化。

<?php

$a = "我在慕课网学习PHP!";

$b = $a;

$c = &$a;

$a = "我不知道我在干嘛!";

echo $b."<br/>";                        //我在慕课网学习PHP!

echo $c."<br/>";                        //我不知道我在干嘛!

?>

比较运算符

比较运算符主要是用于进行比较运算的,例如:等于、全等、不等、大于、小于。

在PHP中常用的比较运算符:>      <       >=      <=     ==    !=      ===     !==     <>(不等)

三元运算符

(“?:”)三元运算符也是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3。

逻辑运算符

主用是进行逻辑运算的,例如:逻辑与、逻辑或、逻辑异或、逻辑非等,在PHP中常用的逻辑运算符如下表:

And(逻辑与)     $a and $b         如果$a与$b都为TRUE,返回TRUE

Or(逻辑或)         $a or $b        如果$a或$b任一为TRUE,返回TRUE

Xor(逻辑异或)      $a xor $b        如果$a与$b有且仅有一个为TRUE,返回TRUE

Not(逻辑非)         !$a                  如果$a不为TRUE,返回TRUE

And(逻辑与)     $a && $b           如果$a与$b都为TRUE,返回TRUE

Or(逻辑或)      $a || $b              如果$a或$b任一为TRUE,返回TRUE

“与”和“或”有两种不同形式运算符的原因是它们运算的优先级

前三个逻辑运算符的优先级最低。

错误控制运算符

PHP中提供了一个错误控制运算符“@”,对于一些可能会在运行过程中出错的表达式时,我们不希望出错的时候给客户显示错误信息,这样对用户不友好。于是,可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉;

如果激活了track_error(这个玩意在php.ini中设置)特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中,此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。

需要注意的是:错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

<?php

$conn = @mysql_connect("localhost","username","password");

echo "出错了,错误原因是:".$php_errormsg;

?>


六、语言结构语句

1、顺序结构

顺序结构就像一条直线,按着顺序一直往下执行。我们编写的代码默认都是按照顺序结构执行的。

2.PHP条件结构之if…else…

条件结构就像一个岔路口,可以向左走,也可以向右走。

PHP中的“if…else…”语法,如下:

<?php

if(条件){

//分配服务器干的任务A

}else{

//分配服务器干的任务B

}

?>

3.PHP条件结构之if…else if…

PHP中的“if…else if…”语法,如下:

<?php

if(条件一){

//分配服务器干的任务A

}else if(条件二){

//分配服务器干的任务B

}

?>

通过条件一判断,若返回值为布尔值为TRUE,则执行任务A,若返回值为FALSE,则判断条件二,若返回值为布尔值TRUE,则执行任务B,否则既不执行任务A,也不执行任务B。服务器会继续往下执行其他任务。

4.PHP条件结构之if…else if…else…

PHP中的“if…else if…else…”语法,如下:

<?php

if(条件一){

//分配服务器干的任务A

}else if(条件二){

//分配服务器干的任务B

}else{

//分配服务器干的任务C

}

?>

通过条件一判断,若返回值为布尔值TRUE,则执行任务A,若返回值为FALSE,则判断条件二,若返回值为布尔值TRUE,则执行任务B,否则既不执行任务A,也不执行任务B,执行任务C。

5、PHP条件结构之switch…case…

PHP中的“switch...case...”语法,如下:

<?php

switch (条件)

{

case 条件值一:

//任务一

break;

case 条件值二:

//任务二

break;

default:

//默认任务

}

?>

首先判断条件,若条件的返回值为条件值一,则执行任务一,若条件返回的值为条件值二,则执行任务二,若条件的返回值既不是条件值一也不是条件值二,则执行默认任务。break的作用是结束switch(后面会有专门举例说明),使用switch 语句可以避免冗长的 “if..else if..else”代码块。

break的作用是阻止代码进入下一个case 中继续执行。

6、PHP中循环结构之while循环语句

在PHP中,while循环语句如下:

<?php

while(条件){

//执行任务

}

?>

首先判断某个条件是否符合(条件返回值是否为TRUE),若符合则执行任务,执行完毕任务,再判断条件是否满足要求,符合则重复执行此任务,否则结束任务。

7.PHP中循环结构之do while循环语句

语法如下:

<?php

do{

//执行任务

}while(条件)

?>

首先执行任务(上一节的while语句是先判断条件是否成立,再执行任务),执行任务完毕,判断某个条件是否符合(条件返回值是否为TRUE),若符合则再次执行任务,执行完毕任务,继续判定条件。

while与do…while循环语句的区别是,while先判断条件是否成立,后执行循环,do...while先执行一次任务,再判断是否继续执行循环,也就是说do...while至少会执行一次任务。当条件为FALSE时,while中的任务会一次也不执行,do...while中的任务会执行1次。

8、PHP中循环结构之for循环语句

for循环语句结构如下:

<?php

for(初始化;循环条件;递增项){

//执行任务

}

?>

for 语句中,“初始化”在循环开始前无条件求值一次,“循环条件”在每次循环开始前求值。如果值为 TRUE,则继续循环,执行循环体语句(执行任务)。如果值为 FALSE,则终止循环。“递增项”在每次循环之后被求值(执行)。其常用于循环执行代码块指定的次数。

9、PHP中循环结构之foreach循环语句

在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标、取下标。

(1)只取值,不取下标

<?php

foreach (数组   as    值){

//执行的任务

}

?>

(2)同时取下标和值

<?php

foreach (数组    as    下标 => 值){ 

//执行的任务

}

?>

有一组以学号为下标,姓名为值的数组,这时候需要遍历数组的姓名。

<?php

$students = array('2010'=>'令狐冲','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向问天','2015'=>'任我行','2016'=>'冲虚','2017'=>'方正','2018'=>'岳不群','2019'=>'宁中则',);//10个学生的学号和姓名,用数组存储

//使用循环结构遍历数组,获取学号和姓名  

foreach($students as  $v)

{    

 echo $v;       //输出(打印)姓名

echo "<br/>";

}

?>

列出所有学生学号和姓名!

<?php

$students = array('2010'=>'令狐冲','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向问天','2015'=>'任我行','2016'=>'冲虚','2017'=>'方正','2018'=>'岳不群','2019'=>'宁中则',);//10个学生的学号和姓名,用数组存储

//使用循环结构遍历数组,获取学号和姓名

foreach($students as  $key=>$v)

{

echo $key.":".$v;//输出(打印)学号:姓名

echo "<br/>";

}

?>

10.PHP中结构嵌套之条件嵌套

条件结构嵌套就像回家的路上会遇到多个十字路口。

11.PHP中结构嵌套之循环嵌套

循环结构嵌套,就是类似于跑多个足球场,例如假设有两个足球场,一个大足球场,一个小足球场,在大足球场跑一圈后,再到小足球场跑几圈,跑完几圈后,再到大足球场中继续跑。在遍历二维数组中很常用。

12.PHP中结构嵌套之循环结构与条件结构嵌套

有时候在执行任务时,对于一些特殊的任务还需要进行额外处理,这个时候就会将循环结构与条件结构嵌套使用。

推荐阅读更多精彩内容