PHP之路 PHP核心语法【第二篇】PHP基本语法
1.PHP 标记
以<?php开始和以?>结束标记是标准风格,这是PHP推荐使用的标记风格。 以<scriptlanguage="php">开始和<script>结束是长风格标记,这种标记最长,总是可用的,但我们并不常用。 以<?开始和以?>结束标记是简短风格的标记,是最简单的,但是系统管理员偶尔会禁用掉它,因为它会干扰XML文档的声明。只用通过php.ini配置文件中的指令short_open_tag打开后就可以使用。 以<%开始和以%>结束标记是ASP风格的标记,可以在php.ini配置文件设定中启用了asp_tags选项就可以使用它(默认是禁用的),习惯了ASP风格的可以使用它。
注意:修改php.ini要重启Apache才会生效
长风格标记
短风格标记
ASP风格标记
2.指令分隔符
在php中每条语句使用分号结束的。也就是分号是php语句之间的分割符(分号一般紧跟在指令尾部)。
注意: 在每个脚本中,最后一条语句后可以没有分号结束。
3.程序注释
单行注释 // # 多行注释 /**/
4.变量
变量的声明与使用
php是一个弱类型语言。 变量的命名规范:变量是以$符开始定义的, 变量名的规则:由字母、数字、下划线构成,不可以使用数字开头。 在php中变量名是区分大小写
获取和判断变量类型
gettype is
<?php $string='abcdef'; echo gettype($string); //string echo is_string(intval($string)); //1
可变变量与引用传值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php $a = 'hello'; //普通变量 $$a = 'world'; //可变变量 echo "$a ${$a}"; //输出:hello world echo "<hr>"; echo "$a $hello"; //输出:hello world echo "<hr>"; $i='j'; $j='k'; $k='hello world'; echo $$$i; //输出:hello world ?>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php $a=5; $b=&$a; echo $b; //输出5 $a=7; echo $b; //输出7 ?>
5.数据类型
种类
*在php中共计有8种基本数据类型: 4种标量类型: 整数(int)、浮点数(float/double)、布尔值(boolean)、字串(string) 2种复合类型: 数组(array)、 对象(object) 2种特殊类型: 资源(resource)、 空(NULL) 其中:对象和资源类型属于引用类型,其他都属于值类型。
查看类型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
is_bool():判断是否是布尔型 is_int()、is_integer()和is_long():判断是否为整型。 is_float()、is_double()和is_real():判断是否为浮点型 is_string():判断是否为字符串 is_array():判断是否为数组 is_object():判断是否为对象 is_resource():判断是否为资源类型 is_null():判断是否为null is_scalar():判断是否为标量 is_numeric():判断是否是任何类型的数字和数字字符串 is_callable():判断是否是有效的函数名 函数:bool settype ( mixed var, string type )是将变量 var 的类型设置成 type。
类型详解
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //整数类型:int(integer) //十进制: 0 1 2 3 4 5 6 7 8 9 //八进制: 0 1 2 3 4 5 6 7 //十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f echo 10; //输出十进制的值10 echo "<br/>"; //输出换行 echo 010; //输出八进制的值8 echo "<br/>"; //输出换行 echo 0x10; //输出十六进制的值16 //在php中整数占4个字节:32位。 echo "<br/>"; //输出换行 //输出整数的二进制 //printf("%b",-2147483648); //最小负数:10000000000000000000000000000000 //printf("%b",2147483647); //最大整数: 01111111111111111111111111111111 printf("%b",-1); //最大负整数: 11111111111111111111111111111111 echo "<br/>"; //输出换行 $a=2147483647; var_dump($a); $a++; //自增一个 var_dump($a);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //php中的浮点类型(float/double): $f = 12.4; var_dump($f); //float(12.4) echo 1.345E4; //13450 //科学计数法 echo "<br/>"; //计算机中浮点类型的计算会有精度损耗。 if((0.1+0.7)==0.8){ echo "(0.1+0.7)和0.8相等"; }else{ echo "(0.1+0.7)和0.8不相等"; } echo 0.1+0.7; echo "<br/>"; if((0.3+0.2)==0.5){ echo "相等"; }else{ echo "不相等"; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); //php中的字串类型 //在php中定义字串的方式一共有四种写法:单引号、双引号、定界符(带单引号和不带)。 $s = 'abc'; var_dump($s); //string(3) "abc" $s = "zhangsan"; var_dump($s); //string(3) "abc" echo "<hr/>"; //单引号和双引号定义字串的区别: $a=10; echo '$a kg'; //单引号不支持变量解析 $a kg echo "$a kg"; //双引号支持变量解析 10 kg echo "{$a}kg"; //双引号中的变量使用{}包括起来解析 10kg echo "<br/>"; echo 'hello\' \\php!'; //单引号中可以转义\'和\\ echo "he\$llo\" \\php\n!"; //双引号中可以转义\" \\ \$ \n \t \r ... echo "<br/>"; echo "<hr/>"; //使用定界符定义字串(这种定界符中可以使用变量) $str = <<<mystr <ul class="lh"> <li><a href="/1316-1381.html">面部护肤</a></li> <li><a href="/5025-5026.html">瑞士名表</a></li> <li><a href="/1316-1387.html">彩妆香水</a></li> <li><a href="/5025-5027.html">国产名表</a></li> <li><a href="/1316-1386.html">洗发护发</a></li> <li><a href="/5025-5029.html">时尚腕表</a></li> <li><a href="/1316-1383.html">身体护肤{$a}</a></li> </ul> mystr; echo $str; echo "<hr/>"; /*使用定界符定义字串(带单引号的定界符,这种定界符中不可以使用变量) $str = <<<'mystr' <ul class="lh"> <li><a href="/1316-1381.html">面部护肤</a></li> <li><a href="/5025-5026.html">瑞士名表</a></li> <li><a href="/1316-1387.html">彩妆香水</a></li> <li><a href="/5025-5027.html">国产名表</a></li> <li><a href="/1316-1386.html">洗发护发</a></li> <li><a href="/5025-5029.html">时尚腕表</a></li> <li><a href="/1316-1383.html">身体护肤{$a}</a></li> </ul> mystr; echo $str; */
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //其他的数据类型:数组array 对象object 资源resource //数组的定义和使用 $a=array(10,20,30,'aa'); //将三个值以数组方式赋给变量a echo $a[1]; //输出第二个值 20 var_dump($a); echo "<hr/>"; //类的定义和对象使用 //定义一个类(类中有两个属性,一个方法(功能)) class Person{ public $name="张三"; public $age=20; public function getinfo(){ return $this->name.":".$this->age; } } //将类实例化成一个对象 $ob = new Person(); echo $ob->getinfo(); //使用对象输出信息 var_dump($ob); echo "<hr/>"; //资源类型: $f = fopen("a.txt","a"); var_dump($f); fwrite($f,"aaa");
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //数据的空类型NULL: var_dump($a); //输出一个不存在的变量为null $b=10; var_dump($b); unset($b); //执行unset销毁的变量为null var_dump($b); $c=20; var_dump($c); $c=null; //将变量值赋值为null时值为null var_dump($c);
字符串补充
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //对于字符串中的指定字符做增删改查操作 $string='abcdef'; //查找 echo $string{0}; echo '<br/>'; echo $string{2}; echo '<br/>'; echo $string{5}; echo '<br/>'; //修改 //注意,修改的时候只能一个字符替换一个字符 $string{1}='z'; echo $string;//azcdef echo '<br/>'; $string{4}='!'; echo $string;//azcd!f echo '<hr/>'; $string='abc'; $string{0}='hello'; echo $string;//hbc echo '<hr/>'; //不要对于中文字符做操作 $string='你好'; var_dump($string);//'你好' (length=6) echo '<hr/>'; //删除 $string='abcdef'; $string{2}=''; echo $string; echo '<br/>'; $string{0}=''; echo $string; //添加字符 echo '<br/>'; $string='abc'; $string{3}='d'; echo $string; echo '<br/>'; $string='abc';//abc00e $string{5}='e';//abc e echo $string; echo '<br/>'; var_dump($string); /* $string='king'; 1.输出首字母 2.将字符串中n编程o 3.将字符串中i删除掉 4.在字符串末尾添加一个! */
6.类型转换
类型转换是指将变量或值从一种数据类型转换成其他数据类型。转换的方法有两种
自动转换 强制转换
自动转换
布尔值/null: true在算术计算中可以自动转成数值1; false在算术计算中可以自动转成数值0; null在算术计算中可以自动转成数值0; 直接输出true的值:1 false和null是没有输出结果 字串类型的转换 字串在算术计算中可以自动转成数值: 规则:从字串前面开始找最大的数字即为数值 "123abc" => 123 "abc123" => 0 "12a8c3" => 12 "abcd" => 0 "12.4bd" => 12.4 "12e4abc"=> 12e4
强制转换
(int),(integer) - 转换成整型 (bool),(boolean) - 转换成布尔型 (float),(double),(real) - 转换成浮点型 (string) - 转换成字符串 (array) - 转换成数组 (object) - 转换成对象
临时转换与永久转换
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //临时转换的例子 $var=true; var_dump($var); $res=(int)$var; var_dump($res); var_dump($var); echo '<hr/>'; var_dump((int)$var,(integer)$var); //临时转换成浮点类型 var_dump((float)$var,(double)$var,(real)$var); echo '<br/>'; $var=3.6; //舍掉小数部分 var_dump((int)$var,(integer)$var); //临时转换成字符串型 $var=true; var_dump((string)$var); //临时转换成布尔类型 $var='3king'; var_dump((bool)$var,(boolean)$var); //临时转换成空 $var='hello'; var_dump((unset)$var); //临时转换成数组 $var=123; var_dump((array)$var); //临时转换成对象 $var=12.3; var_dump((object)$var);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //通过系统函数完成临时转换 $var='3king'; $res=intval($var); var_dump($res); /* Fatal(致命错误) error: Uncaught Error: Call to undefined function realval() in /home/vagrant/php-project/studyPHP/demo1/15-type.php on line 11 调用了未定义的函数realval() */ var_dump(floatval($var),doubleval($var)); var_dump(boolval($var)); $var=true; var_dump(strval($var));
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //永久转换的例子 //得到变量的类型 $var=123; var_dump($var);//int 123 echo gettype($var);//integer echo '<br/>'; $var=true; echo gettype($var);//boolean echo '<hr/>'; //永久转换settype($var,$type) $var=123; var_dump($var); //对$var做了一个手术,变成布尔类型 settype($var,'bool'); var_dump($var); /* type可能的值为: “boolean” (或为“bool”,从 PHP 4.2.0 起) “integer” (或为“int”,从 PHP 4.2.0 起) “float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用) "string" "array" "object" “null” */ $var='3king'; settype($var,'int'); var_dump($var); $var=12.3; /* Warning(警告): settype(): Invalid(非法) type in /home/vagrant/php-project/studyPHP/demo1/16-type.php on line 48 */ //手术失败 settype($var,'king'); var_dump($var);
7.常量
可以理解为值不能被修改的变量,使用时不需要加$符
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //php中的常量:固定不变的值称常量,一旦定义是不可以被修改和销毁的。 //在php中常量的定义方式:2种:define()、 const //第一种:使用define()函数 define("PI",3.1415926); //定义一个常量PI值为3.1415926 define("CEO","首先执行官"); define("CEO","首先执行官2"); //修改值无效 //第二种:使用const关键字 const SEO="搜索引擎优化"; //使用常量 echo CEO."<br/>"; echo "我的工作是".SEO."<br/>"; echo 10*PI; //使用常量进行计算 echo "<hr/>"; //输出系统中的魔术常量(预定义常量) echo "当前系统:".PHP_OS."<br/>"; echo "PHP版本:".PHP_VERSION."<br/>"; echo "当前文件名:".__FILE__."<br/>"; echo "当前行号:".__LINE__."<br/>"; echo "<hr/>"; //输出系统中的所有的常量 $list = get_defined_constants(); echo "<pre>"; print_r($list); //格式化输出
常用的魔术常量
__LINE__:当前行号 __FILE__:当前文件 __DIR__:当前目录 __FUNCTION__:当前函数 __CLASS__:当前类 __METHOD__:当前方法 __NAMESPACE__:当前命名空间
8.PHP的运算符
8.1 算术运算符:+ - * / %(取模/求余) ++ -- 8.2 字符串运算符 . .= 8.3 赋值运算符 = += -= *= /= %= .= 8.4 比较运算符 > < >= <= <> != == === !== 8.5 逻辑运算符:逻辑与:and && 逻辑或 or || 逻辑非 not ! 异或:xor 其中逻辑与和逻辑或都具有短路效果。(短路与和短路或) 8.6 位运算符:& | ^ ~ << >> 8.7 其他运算符:?: `` @ => -> instanceof 8.8 运算符的优先级
9.流程控制
if switch while do..while for foreach中,for 和 foreach复杂些
for循环
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php for($i=1;$i<=9;$i++){ echo '<h1>this is a test</h1>'; } echo '<hr/>'; for($i=1;$i<=9;$i++): echo '<h1>hello world</h1>'; endfor; echo '<hr/>'; /* for(exp1;exp2;exp3){ 代码段; } */ $i=1; for(;$i<=3;$i++){ echo $i,'<br/>'; } echo '<hr/>'; //当省略第二个表达式的时候,会认为条件永远为true $i=1; for(;;$i++){ if($i>5){ break; } echo $i,'<br/>'; } echo '<hr/>'; $i=1; for(;;){ if($i>5){ break; } echo $i,'<br/>'; $i++; } echo '<hr/>'; for($i=1,$j=2,$k=3;$i<=5;$i++){ echo '<h2>hello world</h2>'; } var_dump($j,$k); echo '<hr/>'; //最后一个条件决定是否可以执行循环体 for($i=1,$j=2,$k=3;$i<=5,$k<=1;$i++,$k++){ echo '<h2>hello world</h2>'; } var_dump($i,$j,$k);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header('content-type:text/html;charset=utf-8'); //死循环 // for($i=1;$i>=0;$i++){ // echo $i,'<br/>'; // } //可以通过break结束for语句 for($i=1;$i>=0;$i++){ if($i>10){ break; } echo $i,'<br/>'; } echo '<hr/>'; //continue 代表跳过当次循环执行下次循环 for($i=1;$i<=10;$i++){ if($i==3){ continue; echo 'this is a test<br/>'; } echo $i,'<br/>'; } echo '<hr/>'; //for循环的嵌套结构 for($i=1;$i<=3;++$i){ echo '外层循环执行第'.$i.'次<br/>'; for($j=1;$j<=2;++$j){ echo '内层循环执行第'.$j.'次<br/>'; } echo '<hr/>'; } echo '<hr/>'; echo '<table border="1" cellpadding="0" cellspacing="0" width="80%" >'; for($i=1;$i<=5;$i++){ echo '<tr>'; for($j=1;$j<=30;$j++){ echo '<td>x</td>'; } echo '</tr>'; } echo '</table>'; echo '<hr/>'; echo '<table border="1" cellpadding="0" cellspacing="0" width="80%" >'; for($i=1;$i<=9;$i++){ echo '<tr>'; for($j=1;$j<=$i;$j++){ echo "<td>{$j}×{$i}=".($i*$j)."</td>"; } echo '</tr>'; } echo '</table>'; /** 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。 */
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php for($i=1;$i<=9;$i++){ echo '<h1>this is a test</h1>'; } echo '<hr/>'; for($i=1;$i<=9;$i++): echo '<h1>hello world</h1>'; endfor; echo '<hr/>'; /* for(exp1;exp2;exp3){ 代码段; } */ $i=1; for(;$i<=3;$i++){ echo $i,'<br/>'; } echo '<hr/>'; //当省略第二个表达式的时候,会认为条件永远为true $i=1; for(;;$i++){ if($i>5){ break; } echo $i,'<br/>'; } echo '<hr/>'; $i=1; for(;;){ if($i>5){ break; } echo $i,'<br/>'; $i++; } echo '<hr/>'; for($i=1,$j=2,$k=3;$i<=5;$i++){ echo '<h2>hello world</h2>'; } var_dump($j,$k); echo '<hr/>'; //最后一个条件决定是否可以执行循环体 for($i=1,$j=2,$k=3;$i<=5,$k<=1;$i++,$k++){ echo '<h2>hello world</h2>'; } var_dump($i,$j,$k);
10.表单提交
GET方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>我的HTML文档</title> </head> <body> <h3>form表单提交</h3> <form action="form.php" method="get"> 数值1:<input type="text" name="num1"/><br/><br/> 数值2:<input type="text" name="num2"/><br/><br/> <input type="submit" value="求和"/> </form> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php //接收并输出表单提交的信息 $m1 = $_GET['num1']; //从get请求中获取参数num1的值,并赋给变量m1 $m2 = $_GET['num2']; //从get请求中获取参数num2的值,并赋给变量m2 //进行求和 $res = $m1+$m2; //输出 echo $m1."+".$m2."=".$res; form.php
POST方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>我的HTML文档</title> </head> <body> <h3>form表单提交</h3> <form action="form.php" method="post"> <p>姓名: <input type="text" name="name" /></p> <p>年龄: <input type="text" name="age" /></p> <p><input type="submit" /></p> </form> </form> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php header("Content-Type: text/html;charset=utf-8"); echo htmlspecialchars ( $_POST [ 'name' ]); echo (int) $_POST [ 'age' ]; ?>
谢谢