PHP开发工具包括:
PHP服务器组件。
PHP IDE(Integrated Development Environment,集成开发环境)。
MySql管理工具
文本编辑器
PHP服务器组件
PHP服务器组件非常多有WampServer、XAMPP、AppServ、phpStudy、phpnow等。
笔者推荐: WampServer,这也是目前window平台上使用最广泛的,操作也非常简单。WampServer内部还集成了PhpMyAdmin 数据库管理工具。还有phpStudy
WampServer 下载地址:http://www.wampserver.com/en/
phpStudy 下载地址:http://www.phpstudy.net/a.php/208.html
PHP IDE(Integrated Development Environment,集成开发环境)
PHP IDE 也是非常多有Zend Studio、Eclipse for PHP、EasyEclipse等。
笔者推荐:Zend Studio
MySql管理工具
MySql管理工具常用的有:Navicat for Mysql、PhpMyAdmin。
文本编辑器
如果你已经能够熟练掌握PHP的语法,那你可以逐渐抛弃那些笨重的IDE,使用文本编辑器来编写PHP代码。
常用的编辑器有:Sublime、PHPstorm、Notepad++、editplus等。
笔者推荐:Sublime、PHPstorm
PHP语法
PHP echo 和 print 语句
echo 和 print 区别:
? echo - 可以输出一个或多个字符串
? print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
使用 echo 命令输出字符串(字符串可以包含 HTML 标签):
1 2 3 4 |
<!--?php echo "<h2-->PHP is fun!"; echo "This", " string", " was", " made", " with multiple parameters."; ?> |
使用 echo 命令输出变量和字符串:
1 2 3 4 5 6 7 8 9 10 |
<!--?php $txt1="Learn PHP"; $txt2="w3cschool.cc"; $cars=array("Volvo","BMW","Toyota"); echo $txt1; echo "<br-->"; echo "Study PHP at $txt2"; echo "My car is a {$cars[0]}"; ?> |
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
使用 print 命令输出字符串(字符串可以包含 HTML 标签):
1 2 3 4 |
<!--?php print "<h2-->PHP is fun!"; print "I'm about to learn PHP!"; ?> |
使用 print 命令输出变量和字符串:
1 2 3 4 5 6 7 8 9 10 |
<!--?php $txt1="Learn PHP"; $txt2="w3cschool.cc"; $cars=array("Volvo","BMW","Toyota"); print $txt1; print "<br-->"; print "Study PHP at $txt2"; print "My car is a {$cars[0]}"; ?> |
echo出字符串的正确打开方式
一个字符串是用双引号括起来的一个词或一个句字,比如:“Hi,CSDN!”。你可以用PHP语言输出把这个字符串输出,像这样:
1 |
<!--?php echo "Hi,CSDN!";?--> |
也可以用单引号括起来,就像下面代码:
1 |
<!--?php echo 'Hi,CSDN!';?--> |
可以把两个字符用连接符连接起来,像这样:
1 |
<!--?php echo 'Hi,'.'CSDN!';?--> |
注意:连接符可以连接多个字符串,上例就是把一个字符串拆分为二个小字符串,然后用一个连接符连起来。
在php中字符串连接符是用点(.)来表示的,这一点比较特殊。
变量
什么是变量
变量是用于存储值的,我们命令服务器去干活的时候,往往需要产生一些数据,需要临时性存放起来,方便取用。我们也可以理解为,变量就像一个购物袋,我们可以用来装苹果、榴莲(当然也可以用来装玫瑰),需要注意的是,一般情况下一个变量只能装一个(不要太贪心)值,除非是复合变量(后面变量类型时会介绍),当我们放进去一个苹果后,再放进榴莲的时候,苹果就被替换掉,再放入香蕉,那么榴莲就被替换了。
1 2 3 4 5 6 |
$var = "ABCD"; echo $var; echo " "; $var = "1234"; echo $var; |
变量名的命名规则
变量名除了需要“$”进行标识外,还有一些规则需要遵守。就像拿到驾驶证以后,还得遵守交通规则。变量名的命名规则主要有三条:
1、变量名必须以字母或下划线 “_”开头,如”$_name”,”$name” ,”$name2”等,但是”$9name”是不对的。
2、变量名只能由字母、数字、以及“_”组成,还能包含汉字。如”$_qq”,”$qq308” ,”$my_apple”,“比如”$name我等”,但是”$name*”是不对的。
3、变量名不允许包含空格。当变量名由原由网多个单词组成,建议使用“_”进行分隔(比如 $my_apple),俗称下划线法,或者以大写字母开头比如 $myApple,俗称骆驼式命名法(也称驼峰命名法)。
特别需要注意的是,在PHP中变量名是区分大小写的,如“$my_book”与“$my_Book”代表两个不同的变量。
PHP 变量命名规则:
? 变量以 $ 符号开始,后面跟着变量的名称
? 变量名必须以字母或者下划线字符开始
? 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
? 变量名不能包含空格
? 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
PHP 语句和 PHP 变量都是区分大小写的。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!--?php $my_book = "我的小写的book"; $my_BOOK = "我的大写的BOOK"; echo $my_book; echo "<br /-->"; echo $my_BOOK; echo " "; $my_book = "这次奇迹要发生啦"; echo $my_book; echo " "; ?> |
变量是用于存储信息的”容器”:
1 2 3 4 5 6 |
<!--?php $x=5; $y=6; $z=$x+$y; echo $z; ?--> |
与代数类似
x=5
y=6
z=x+y
在代数中,我们使用字母(如 x),并给它赋值(如 5)。
从上面的表达式 z=x+y ,我们可以计算出 z 的值为 11。
变量是用于存储数据的容器。
PHP 是一门弱类型语言
在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
变量作用域
变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有四种不同的变量作用域:
? local
? global
? static
? parameter
局部和全局作用域
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:
1 2 3 4 5 6 |
<!--?php $x=5; // 全局变量 function myTest() { $y=10; // 局部变量 echo "<p-->测试函数内变量: |
"; echo "变量 x 为: $x"; echo "
"; echo "变量 y 为: $y"; } myTest(); echo "
测试函数外变量:
"; echo "变量 x 为: $x"; echo "
"; echo "变量 y 为: $y"; ?>
在以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。
当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。
然后我们在myTest()函数外输出两个变量的值,函数将会输出全局部变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。
你可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。
global 关键字
global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
1 2 3 4 5 6 7 8 9 10 11 |
<!--?php $x=5; $y=10; function myTest() { global $x,$y; $y=$x+$y; } myTest(); echo $y; // 输出 15 ?--> |
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
上例也可以写成:
1 2 3 4 5 6 7 8 9 10 |
<!--?php $x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest(); echo $y; ?--> |
Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:
1 2 3 4 5 6 7 8 9 10 11 |
<!--?php function myTest() { static$x=0; echo $x; $x++; } myTest(); myTest(); myTest(); ?--> |
然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注释:该变量仍然是函数的局部变量。
参数作用域
参数是通过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,作为函数声明的一部分:
1 2 3 4 5 6 7 |
<!--?php function myTest($x) { echo $x; } myTest(5); ?--> |
数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
字符串
字符串型可以用三种方法定义:单引号形式、双引号形式和Heredoc结构形式。
可以将任何文本放在单引号和双引号中:
1 2 3 4 5 6 7 |
<!--?php $x = "Hello world!"; echo $x; echo "<br-->"; $x = 'Hello world!'; echo $x; ?> |
字符串情况一
字符串中包含单(双)引号的时候,怎么办?
第一种方案:在单引号中嵌入双引号;
第二种方案:在双引号中嵌入单引号;
第三种方案:使用转义符“\”(后面部分还有介绍);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!--?php $str_string1 = '甲问:"你去看运动会了吗?"'; $str_string2 = "乙毫不犹豫地回答:'当然没去!'"; $str_string3 = '甲问:\'为什么?\''; $str_string4 = "乙答道:\"太冷了不想出门\""; echo $str_string1; echo "<br /-->"; echo $str_string2; echo " "; echo $str_string3; echo " "; echo $str_string4; echo " "; ?> |
字符串情况二
引号遇到了美元怎么办?此处指用美元符号标识的变量。
当双引号中包含变量时,变量会与双引号中的内容连接在一起;
当单引号中包含变量时,变量会被当做字符串输出。
1 2 3 4 5 6 7 8 |
<!--?php $love = "I love you!"; $string1 = "love,$story"; //双引号echo可以解析出变量 $string2 = 'love,$story'; //单引号echo不能解析出变量 echo $string1; echo "<br /-->"; echo $string2; ?> |
字符串情况三
字符串很长很长怎么办?
我们可以使用Heredoc结构形式的方法来解决该问题,首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串。
1 2 3 4 5 6 |
<!--?php $string1 = <<<GOD 同学你好,我是你专业的辅导员,因为我没有你的QQ号,特地借了这位同学的QQ来发消息给你,希望引起你的重视!经本专业多名同学举报,在上课时间,你不好好学习、认真听讲,总是玩手机发说说,给其他同学的日常学习生活造成了极大的恶劣影响。 GOD; echo $string1; ?--> |
在赋值符号后,输入定界符“<<<”,接着是标识符,你可以用你的女神作为标识符“GOD”,如第2行,也可以使用你喜欢的狗狗,“DOG”作为标识符,但是,结尾处的标识符也必须是一样的。此外,在结尾的一行,一定要另起一行,并且此行除了“GOD”,并以“;”号结束之外,不能有任何其他字符,前后都不能有,包括空格,否则会出现错误。切记。
并置运算符
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。
将两个字符串变量连接在一起:
1 2 3 4 5 |
<!--?php $txt1="Hello world!"; $txt2="What a nice day!"; echo $txt1 . " ". $txt2; ?--> |
上面的代码将输出:Hello world! What a nice day!
提示:在上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格。
strlen() 函数
有时知道字符串值的长度是很有用的。
strlen() 函数返回字符串的长度(字符数)。
下面的实例返回字符串 “Hello world!” 的长度:
1 2 3 |
<!--?php echo strlen("Hello world!"); ?--> |
上面的代码将输出:12
提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)
strpos() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
下面的实例在字符串 “Hello world!” 中查找文本 “world”:
1 2 3 |
<!--?php echo strpos("Hello world!","world"); ?--> |
上面的代码将输出:6
提示:在上面的实例中,字符串 “world” 的位置是 6。之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1。
整型
整数是一个没有小数的数字。
整数规则:
? 整数必须至少有一个数字 (0-9)
? 整数不能包含逗号或空格
? 整数是没有小数点的
? 整数可以是正数或负数
? 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!--?php $x = 59xbLJW85; var_dump($x); echo "<br-->"; $x = -345; // 负数 var_dump($x); echo " "; $x = 0x8C; // 十六进制数 var_dump($x); echo " "; $x = 047; // 八进制数 var_dump($x); ?> |
浮点型
浮点数是带小数部分的数字,或是指数形式。
在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:
1 2 3 4 5 6 7 8 9 10 11 |
<!--?php $x = 10.365; var_dump($x); echo "<br-->"; $x = 2.4e3; var_dump($x); echo " "; $x = 8E-5; var_dump($x); ?> |
布尔型
布尔型只有两个值,一个是TRUE,另一个FALSE。它不区分大小写,”TRUE”和“true”效果是一样的。主要用在条件结构(条件结构在后面部分会介绍)中,例如判断是否满足条件的时候,是用“true”表示满足,用“false”表示不满足。
需要注意的是,当我们用”echo”指令输出布尔类型时,如果是“true”则输出的是“1”,“false”则什么也不输出。我们可以使用“var_dump”函数,获取它真正的数据类型。
1 2 |
$x=true; $y=false; |
1 2 3 4 5 6 7 |
<!--?php $sex = "男"; $flag = $sex == "男"; //判断该变量是否等于“男”,并将比较的结果赋值给变量“$flag” echo $flag; echo "<br /-->"; var_dump($flag); ?> |
数组
数组可以在一个变量中存储多个值。
在以下实例中创建了一个数组, 然后使用 PHP var_dump() 函数返回数组的数据类型和值:
1 2 3 4 |
<!--?php $cars=array("Volvo","BMW","Toyota"); var_dump($cars); ?--> |
在接下来的章节中你将学到更多关于数组的知识。
对象
对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!--?php classCar { var $color; function Car($color="green") { $this--->color = $color; } function what_color() { return$this->color; } } ?> |
PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
NULL 值
NULL是空类型,对大小写不敏感,NULL类型只有一个取值,表示一个变量没有值,当被赋值为NULL,或者尚未被赋值,或者被unset(),这三种情况下变量被认为为NULL。
1 2 3 4 5 |
<!--?php $x="Hello world!"; $x=null; var_dump($x); ?--> |
1 2 3 4 5 6 7 8 9 10 11 12 |
<!--?php error_reporting(0); //禁止显示PHP警告提示 $var; var_dump($var); $var1 = null; var_dump($var1); $var2 = NULL; var_dump( $var2); $var3 = "节日快乐!"; unset ($var3) ; //释放$var3 var_dump($var3); ?--> |
特殊类型—资源
资源(resource):资源是由专门的函数来建立和使用的,例如打开文件、数据连接、图形画布。我们可以对资源进行操作(创建、使用和释放)。任何资源,在不需要的时候应该被及时释放。如果我们忘记了释放资源,系统自动启用垃圾回收机制,在页面执行完毕后回收资源,以避免内存被消耗殆尽。
1 2 3 4 5 |
<!--?php $file=fopen("f.txt","r"); //打开文件 $con=mysql_connect("localhost","root","root"); //连接数据库 $img=imagecreate(100,100);//图形画布 ?--> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!--?php //首先采用“fopen”函数打开文件,得到返回值的就是资源类型。 $file_handle = fopen("good.txt","r"); if($file_handle) { //接着采用while循环(后面语言结构语句中的循环结构会详细介绍)一行行地读取文件,然后输出每行的文字 while(!feof($file_handle)) { //判断是否到最后一行 $line = fgets($file_handle); //读取一行文本 echo $line; //输出一行文本 echo "<br /-->"; //换行 } } fclose($file_handle);//关闭文件 ?> |
常量
PHP 常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。
设置常量
使用 define() 函数:
bool define ( string name,mixedvalue [, bool $case_insensitive = false ] )
该函数有三个参数:
? name:必选参数,常量名称,即标志符。
? value:必选参数,常量的值。
? case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认大小写敏感。
(注: string表示参数类型为字符串类型,mixed表示参数类型可以接受为多种不同的类型,case_sensitive = true表示默认为布尔类型TRUE)
创建一个 区分大小写的常量, 常量值为 “欢迎访问 blog.csdn.net”:
1 2 3 4 5 6 7 |
<!--?php // 区分大小写的常量名 define("GREETING", "欢迎访问 blog.csdn.net"); echo GREETING; // 输出 "欢迎访问 blog.csdn.net" echo '<br-->'; echo greeting; // 输出 "greeting" ?> |
创建一个 不区分大小写的常量, 常量值为 “欢迎访问 blog.csdn.net”:
1 2 3 4 5 |
<!--?php // 不区分大小写的常量名 define("GREETING", "欢迎访问 blog.csdn.net", true); echo greeting; // 输出 "欢迎访问 blog.csdn.net" ?--> |
常量是全局的
在函数内可以使用常量,即便常量定义在函数外也可以正常使用常量。
1 2 3 4 5 6 7 8 |
<!--?php define("GREETING", "欢迎访问 blog.csdn.net"); function myTest() { echo GREETING; } myTest(); // 输出 "欢迎访问 blog.csdn.net" ?--> |
认识一下系统常量
系统常量是PHP已经定义好的常量,可以直接拿来使用,常见的系统常量有:
(1)__FILE__ :php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。
(2)__LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。
(3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。
(4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。
运算符
PHP 算术运算符
1 2 3 4 5 6 7 8 9 |
<!--?php $x=10; $y=6; echo ($x + $y); // 输出16 echo ($x - $y); // 输出4 echo ($x * $y); // 输出60 echo ($x / $y); // 输出1.6666666666667 echo ($x % $y); // 输出4 ?--> |
PHP7+ 版本新增整除运算符 intdiv(),使用:
1 2 3 |
<!--?php var_dump(intdiv(10, 3)); // 输出int(3) ?--> |
取模算术符有什么作用呢?
假设我们要在一个考场安排了一场考试,对考生从1开始,都进行了编号,那么怎么让服务器帮助我们计算考生在的位置呢,进而打印考场的考生对照表呢?
1 2 3 4 5 6 7 8 9 10 |
<!--?php $maxLine = 4; //每排人数 $no = 17;//学生编号 $line = ceil($no/$maxLine); $row = $no%$maxLine?$no%$maxLine:$maxLine; echo "编号<b-->".$no."的座位在第<b>".$line."</b>排第<b>".$row."</b>个位置"; //输出:编号17的座位在第5排第1个位置 ?> |
PHP 赋值运算符
使用不同赋值运算符得到的不同结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!--?php $x=10; echo $x; // 输出10 $y=20; $y += 100; echo $y; // 输出120 $z=50; $z -= 25; echo $z; // 输出25 $i=5; $i *= 6; echo $i; // 输出30 $j=10; $j /= 5; echo $j; // 输出2 $k=15; $k %= 4; echo $k; // 输出3 ?--> |
使用不同字符串运算符得到的不同结果:
1 2 3 4 5 6 7 8 9 |
<!--?php $a = "Hello"; $b = $a . " world!"; echo $b; // 输出Hello world! $x="Hello"; $x .= " world!"; echo $x; // 输出Hello world! ?--> |
PHP 递增/递减运算符
使用递增/递减运算符得到的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!--?php $x=10; echo ++$x; // 输出11 $y=10; echo $y++; // 输出10 $z=5; echo --$z; // 输出4 $i=5; echo $i--; // 输出5 ?--> |
PHP 比较运算符
使用一些比较运算符得到的不同结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!--?php $x=100; $y="100"; var_dump($x == $y); echo "<br-->"; var_dump($x === $y); echo " "; var_dump($x != $y); echo " "; var_dump($x !== $y); echo " "; $a=50; $b=90; var_dump($a > $b); echo " "; var_dump($a < $b); ?> |
PHP 逻辑运算符
PHP 数组运算符
使用一些数组运算符得到的不同结果:
1 2 3 4 5 6 7 8 9 10 11 |
<!--?php $x = array("a"=--> "red", "b"=> "green"); $y = array("c"=> "blue", "d"=> "yellow"); $z = $x + $y; // $x 和 $y 数组合并 var_dump($z); var_dump($x == $y); var_dump($x === $y); var_dump($x != $y); var_dump($x <> $y); var_dump($x !== $y); ?> |
三元运算符
另一个条件运算符是”?:”(或三元)运算符 。
语法格式
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
1 2 3 4 5 6 7 8 9 10 |
<!--?php $test = 'CSDN'; 原由网// 通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET['user'],否则返回 nobody // 普通写法 $username = isset($test) ? $test : 'nobody'; echo $username, PHP_EOL; // PHP 5.3+ 版本写法 $username = $test ?: 'nobody'; echo $username, PHP_EOL; ?--> |
注意:PHP_EOL 是一个换行符,兼容更大平台。
在 PHP7+ 版本多了一个 NULL 合并运算符,实例如下:
1 2 3 4 5 6 |
<!--?php // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 类似的三元运算符 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?--> |
组合比较符(PHP7+)
PHP7+ 支持组合比较符:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<!--?php // 整型 echo 1<=--> 1; // 0 echo 1<=> 2; // -1 echo 2<=> 1; // 1 // 浮点型 echo 1.5<=> 1.5; // 0 echo 1.5<=> 2.5; // -1 echo 2.5<=> 1.5; // 1 // 字符串 echo "a"<=> "a"; // 0 echo "a"<=> "b"; // -1 echo "b"<=> "a"; // 1 ?> |
PHP 错误控制运算符
PHP中提供了一个错误控制运算符“@”,对于一些可能会在运行过程中出错的表达式时,我们不希望出错的时候给客户显示错误信息,这样对用户不友好。于是,可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉;
如果激活了track_error(这个玩意在php.ini中设置)特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中,此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。
需要注意的是:错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。
1 2 3 4 5 6 |
<!--?php $conn = @mysql_connect("localhost","username","password"); echo "出错了,错误原因是:".$php_errormsg; /*输出:出错了,错误原因是:mysql_connect() [function.mysql-connect]: Access denied for user 'username'@'localhost' (using password: YES)*/ ?--> |
语言结构语句
PHP 条件结构之If…Else
PHP 条件语句
编写代码时,常常需要为不同的判断执行不同的动作。
在 PHP 中,提供了下列条件语句:
? if 语句 - 在条件成立时执行代码
? if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
? if…else if….else 语句 - 在若干条件之一成立时执行一个代码块
? switch 语句 - 在若干条件之一成立时执行一个代码块
PHP 条件结构之switch…case…
工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!--?php $favcolor="red"; switch($favcolor) { case"red": echo "你喜欢的颜色是红色!"; break; case"blue": echo "你喜欢的颜色是蓝色!"; break; case"green": echo "你喜欢的颜色是绿色!"; break; default: echo "你喜欢的颜色不是 红, 蓝, 或绿色!"; } ?--> |
在 PHP 中,提供了下列循环语句:
? while - 只要指定的条件成立,则循环执行代码块
? do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
? for - 循环执行代码块指定的次数
? foreach - 根据数组中每个元素来循环代码块
PHP 循环结构之while
while 循环将重复执行代码块,直到指定的条件不成立。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!--?php $i=1; //首先设置变量 i 的值为 1 while($i<=5) //只要 i 小于或者等于 5,while 循环将继续运行。循环每运行一次,i 就会递增 1 { echo "The number is ". $i . "<br-->"; $i++; } //输出: //The number is 1 //The number is 2 //The number is 3 //The number is 4 //The number is 5 ?> |
PHP 循环结构之do…while
do…while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!--?php $i=1; //首先设置变量 i 的值为 1 do//将变量 i 的值递增 1,然后输出。先检查条件(i 小于或者等于 5),只要 i 小于或者等于 5,循环将继续 { $i++; echo "The number is ". $i . "<br-->"; } while($i<=5); //输出: //The number is 2 //The number is 3 //The number is 4 //The number is 5 //The number is 6 ?> |
PHP 循环结构之do…while的运用优势举例
while和do…while可以根据具体情况选用。
假设有一种棋类游戏,首先掷骰子,若不为6,前进骰子的点数的步长;若为6,前进骰子的点数的步长,并可以再掷一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!--?php //while例子 $sum = 0; $num = rand(1,6); //获取1至6的随机数,模拟掷骰子 $sum = $sum + $num;//前进步长 while($num==6) { $num = rand(1,6);//获取1至6的随机数,模拟掷骰子 $sum = $sum + $num;//前进步长 }; echo "while例子执行完毕,前进:".$sum ."<br /-->"; //do...while例子 $sum = 0; do { $num = rand(1,6);//获取1至6的随机数,模拟掷骰子 $sum = $sum + $num;//前进步长 } while($num==6); echo "do...while例子执行完毕,前进:".$sum ." "; //输出: //while例子执行完毕,前进:16 //do...while例子执行完毕,前进:15 ?> |
PHP 循环结构之for
for 循环用于您预先知道脚本需要运行的次数的情况。
初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
1 2 3 4 5 6 |
<!--?php for($i=1; $i<=5; $i++) //只要变量 i 小于或者等于 5,循环将继续运行。循环每运行一次,变量 i 就会递增 1 { echo "The number is ". $i . "<br-->"; } ?> |
输出:
The number is 1
The numbwww.58yuanyou.comer is 2
The number is 3
The number is 4
The number is 5
PHP 循环结构之foreach
foreach 循环用于遍历数组。
foreach ($array as $value)
{
要执行代码;
}
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
1 2 3 4 5 6 7 |
<!--?php $x=array("one","two","three"); foreach ($x as $value) //输出给定数组的值的循环 { echo $value . "<br-->"; } ?> |
输出:
one
two
three
PHP中foreach循环语句一般有两种使用方式:不取下标、取下标。
(1)只取值,不取下标
1 2 3 4 5 |
<!--?php foreach (数组 as 值){ //执行的任务 } ?--> |
(2)同时取下标和值
1 2 3 4 5 |
<!--?php foreach (数组 as 下标 =--> 值){ //执行的任务 } ?> |
列出所有学生姓名!有一组以学号为下标,姓名为值的数组,这时候需要遍历数组的姓名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!--?php $students = array( '2010'=-->'令狐冲', '2011'=>'林平之', '2012'=>'曲洋', '2013'=>'任盈盈', '2014'=>'向问天', '2015'=>'任我行', '2016'=>'冲虚', '2017'=>'方正',原由网 '2018'=>'岳不群', '2019'=>'宁中则', );//10个学生的学号和姓名,用数组存储 //使用循环结构遍历数组,获取学号和姓名 foreach($students as $v) { echo $v;//输出(打印)姓名 echo " "; } ?> |
输出:
令狐冲
林平之
曲洋
任盈盈
向问天
任我行
冲虚
方正
岳不群
宁中则
列出所有学生学号和姓名!有时候需要同时列出学号和姓名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!--?php $students = array( '2010'=-->'令狐冲', '2011'=>'林平之', '2012'=>'曲洋', '2013'=>'任盈盈', '2014'=>'向问天', '2015'=>'任我行', '2016'=>'冲虚', '2017'=>'方正', '2018'=>'岳不群', '2019'=>'宁中则', );//10个学生的学号和姓名,用数组存储 //使用循环结构遍历数组,获取学号和姓名 foreach($students as $key =>$v) { echo $key.":".$v;//输出(打印)学号:姓名 echo " "; } ?> |
输出:
2010:令狐冲
2011:林平之
2012:曲洋
2013:任盈盈
2014:向问天
2015:任我行
2016:冲虚
2017:方正
2018:岳不群
2019:宁中则
PHP 结构嵌套之条件嵌套
条件结构嵌套就像回家的路上会遇到多个十字路口。
假设在发3月工资的时候,不仅判定性别,还要判定男性是否有房,没有房,可以发放住房补贴,对于女性,判定是否怀孕,怀孕还有怀孕补贴。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!--?php $totalMoney = 0;//总工资 $basicMoney = 300;//基本工资 $sex = "男"; $noHouse = TRUE; //是否有房 $houseMoney = 150;//住房补贴 $isPregnancy = TRUE; //是否怀孕 $pregnancyMoney = 100;//怀孕补贴 if($sex == "男") { $totalMoney = $basicMoney + 0;// 男的没奖金 if($noHouse) { $totalMoney = $totalMoney + $houseMoney; } } elseif($sex == "女") { $totalMoney = $basicMoney + 300;// 女的有奖金300元 if($isPregnancy) { $totalMoney = $totalMoney + $pregnancyMoney; } } echo $totalMoney; ?--> |
输出:
450
PHP 结构嵌套之循环嵌套
循环结构嵌套,就是类似于跑多个足球场,例如假设有两个足球场,一个大足球场,一个小足球场,在大足球场跑一圈后,再到小足球场跑几圈,跑完几圈后,再到大足球场中继续跑。在遍历二维数组中很常用。
通过二维数组,保存了学号、姓名和成绩,可以通过两个循环嵌套,遍历出学号和姓名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<!--?php $students = array( '2010'=-->array('令狐冲',"59"), '2011'=>array('林平之',"44"), '2012'=>array('曲洋',"89"), '2013'=>array('任盈盈',"92"), '2014'=>array('向问天',"93"), '2015'=>array('任我行',"87"), '2016'=>array('冲虚',"58"), '2017'=>array('方正',"74"), '2018'=>array('岳不群',"91"), '2019'=>array('宁中则',"90"), );//10个学生的学号、姓名、分数,用数组存储 foreach($students as $key=>$val) { //使用循环结构遍历数组,获取学号 echo $key; //输出学号 echo ":"; //循环输出姓名和分数 foreach($val as $v) { echo $v; } echo " "; } ?> |
输出:
2010:令狐冲59
2011:林平之44
2012:曲洋89
2013:任盈盈92
2014:向问天93
2015:任我行87
2016:冲虚58
2017:方正74
2018:岳不群91
2019:宁中则90
PHP 结构嵌套之循环结构与条件结构嵌套
有时候在执行任务时,对于一些特殊的任务还需要进行额外处理,这个时候就会将循环结构与条件结构嵌套使用。
有个学生数组存储了学号和姓名,我们需要查找学号为“2014”的学生姓名,这时候我们就需要遍历该数组,并判定学号是否为“2014”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!--?php $students = array( '2010'=-->'令狐冲', '2011'=>'林平之', '2012'=>'曲洋', '2013'=>'任盈盈', '2014'=>'向问天', '2015'=>'任我行', '2016'=>'冲虚', '2017'=>'方正', '2018'=>'岳不群', '2019'=>'宁中则', );//10个学生的学号和姓名,用数组存储 $query = '2014'; //使用循环结构遍历数组,获取学号和姓名 foreach($students as $key =>$v) { //使用条件结构,判断是否为该学号 if($key == $query) { echo $v;//输出(打印)姓名 break;//结束循环(跳出循环) } } ?> |
输出:
向问天