1 PHP基础语法
1.1 在 HTML 中嵌入 PHP 的4种方法:
1.1.1 XML 风格:
<?php ... ?>
1.1.2 简短风格:
<? ... ?>
1.1.3 SCRIPT 风格:
<script language = "php"> ... </script>
1.1.4 ASP 风格:
<% ... %>
注意: XML 风格与 SCRIPT 风格总是可用的。简短风格 和 ASP 风格需要在 php.ini 配置文件中打开或关闭,打开方法是将选项 shor_open_tag 或 asp_tag 选项赋值 on 。
1.2 PHP的 3 种注释方法
// 这是单行注释
# 这也是单行注释
/*
这是多行注释块 它横跨了 多行 */
注意 : 单行注释不可以出现 ?> ,否则会被PHP编译器识别为PHP程序的结束符;
1.3 PHP 的 8 种数据类型:
1.3.1 四种标量类型:
boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串)
1.3.2 两种复合类型:
array (数组) //array,元素由键值对组成,键也称索引,值的下标; object (对象)
1.3.3 两种特殊类型:
resource (资源) NULL (NULL)
相关:
var_dump() 可以查看表达式的值和类型;
gettype() 可以查看类型;
is_type() 可以判断类型;
PHP 中的类型强制转换,在要转换的变量之前加上用括号括起来的目标类型。
单引号与双引号区别:
单引号表示字符串时,字符串被视为纯文字,双引号表示时,PHP会对字符串进行相应处理;所以,定义简单字符串时使用单引号,避免php花时间解析变量;
1.5 变量
1.5.1 基础:
变量区分大小写;
变量不能与数字、空格、. 开头命名,可以有汉字;
$this 是一个特殊的变量,它不能被赋值。
可变变量,$a=’aa’;$$a=”bb”;则 $aa=”bb”;
传值赋值,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
引用赋值,$a=”aa”; $b=&$a; 则改变$a的值,$b也变化。不同:存储结构是分开的,即使unset($a),$b还在(区分C语言)
变量类型:int str array bool object float resource null;
1.5.2 预定义变量:
$_SESSION, $_COOKIE, $_POST, $_GET, $_REQUEST, $_FILES,$_EVN ....
1.5.3 PHP 三种不同变量的作用域:
1 local(局部)
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
2 global(全局)
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
3 static(静态)
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。 全局变量本身就是静态存储方式,所有的全局变量都是静态变量;
1.6 常量
1.6.1 定义常量:
define("NAME",$value,[TRUE]); //如果第三个参数为true,则不区分大小写,默认是区分大小写的
可以简单的通过指定其名字来取得常量的值,也可以用函数 constant() 来获取常量的值;用 get_defined_constants() 可以获得所有已定义的常量列表。
1.6.2 魔术常量:
__LINE__ //文件中的当前行号。
__FILE__ //文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__ //文件所在的目录。等价于 dirname(__FILE__)。
__FUNCTION__ //返回该函数被定义时的名字(区分大小写)。
__CLASS__ //返回该类被定义时的名字(区分大小写)。
__TRAIT__ //返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域。
__METHOD__ //返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ //当前命名空间的名称(区分大小写)。
1.7 运算符
算数运算符:+ – * / % ++ –;
连接运算符: . ;
赋值运算符: =, +=,-=,*=,/=,%=,.=;
比较运算符:>,<,==,===,!= <>,!==;
逻辑运算符: and,&& ; or,|| ; not,! ; xor(逻辑异或,两边不同返回TRUE,相同返回FALSE);
位运算符 : & ;|;^(异或,不同返回1);~(非运算符,1.0取反);<<左移,右边空出的补0;>>右移左边空出的补0
1.8 流程控制
1.8.1 if语句
if ($a > $b) { echo "a is greater than b"; }
1.8.2 if…else语句
if ($a > $b) { echo "a is greater than b"; } else { echo "a is NOT greater than b"; }
1.8.3 if…elseif….else语句
<?php if ($a > $b) { echo "a is bigger than b"; } elseif ($a == $b) { echo "a is equal to b"; } else { echo "a is smaller than b"; } ?>
相关:流程控制的替代语法 ¶
<?php if ($a == 5): echo "a equals 5"; echo "..."; elseif ($a == 6): echo "a equals 6"; echo "!!!"; else: echo "a is neither 5 nor 6"; endif; ?>
1.8.4 switch 语句
类似于具有同一个表达式的一系列 if 语句。下面使用两种不同方法实现同样的事,一个用一系列的 if 和 elseif 语句,另一个用 switch 语句:
<?php if ($i == 0) { echo "i equals 0"; } elseif ($i == 1) { echo "i equals 1"; } elseif ($i == 2) { echo "i equals 2"; } switch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; } ?>
1.8.5 while 循环
$i = 1; while ($i <= 10): print $i; $i++; endwhile;
1.8.6 do…while循环
$i = 0; do { echo $i; } while ($i > 0);
注意 : while循环和do…while循环除了判断条件的位置不同外,还有一个区别就是do…while循环要在语句的尾部加上分号(;);
1.8.7 for循环语句
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < count($people); ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
以上代码可能执行很慢,因为每次循环时都要计算一遍数组的长度。由于数组的长度始终不变,可以用一个中间变量来储存数组长度以优化而不是不停调用 count():
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = count($people); $i < $size; ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
1.8.8 foreach 循环语句
oreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,
有两种语法:
foreach (array_expression as $value) statement /* 将数组中的值遍历赋于$value */ foreach (array_expression as $key => $value) statement /* 将数组的键遍历赋于$key,将数组的值遍历赋予$value */
1.8.9 include 和 require
include() 每次执行文件都要进行读取,如果文件不存在,会给出一个 warning,但脚本会继续执行;
require() 文件只处理一次,这就意味着如果可能执行多次的代码,则使用require()效率比较高;
include_once() 与 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
require_once() 与 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
理解:require 相当于文件内容替换require()语句,只加载一次以后都在那里,当是不能重复加载;否则报错停止代码运行;include相当于运行一次脚本就加载一次文本内容,加载之后又需要重新加载,所以理论上require的效率更高,由此特性可区分报错级别与运用域;
1.8.10 其它语句:
continue 跳过当前循环,循环还在继续
break 跳出当前循环,循环终止;
exit 终止当前脚本,这行代码后边的代码不执行;
return 立即结束此函数的执行并将它的参数作为函数的值返回。
goto 操作符可以用来跳转到程序中的另一位置。通常的用法是用 goto 代替多层的 break。
declare
1.9 编码规范:
类命名,使用驼峰法,即首字母大写,不使用空格和“_”;
常量命名,字母全部大写,多单词使用”_”隔开;
静态变量命名,使用小写的s_开头;
局部变量命名, 变量使用’_’开头;
全局变量命名,应该带前缀’g’;
session变量,所有字母使用大写,使用’S_’开头,多个单词间使用’_’间隔;
变量命名,字母全部小写,多单词使用”_”隔开;
数组命名,一般都是复数,即单词后添加 “s;
方法或函数命名,首字母小写,除第一个单词外,其他单词首字母大写;
类文件命名,后缀是.class.php;
数据库表名命名,表名均使用小写字母,普通数据表,使用_t结尾,视图,使用_v结尾,多个单词组成的表名,使用_间隔;
数据库字段命名,全部使用小写,多个单词间使用_间隔;
大括号{ }书写规则:
a.{直接跟在控制语句之后,不换行 for ($i=0;$i<$count;$i++) { echo "test"; } b.{在控制语句下一行 for($i=0;$i<$count;$i++) { echo "test"; }
小括号( )和函数、关键词等
a. 不要把小括号和关键词紧贴在一起,要用一个空格间隔;如if ( $a<$b ); b. 小括号和函数名间没有空格;如$test = date("ymdhis"); c. 除非必要,不要在Return返回语句中使用小括号。 如Return $a;
=符号书写
a. 在=符号的两侧,均需留出一个空格;如$a = $b 、if ($a = = $b)等; b. 在一个申明块,或者实现同样功能的一个块中,要求=号尽量上下对其,左边可以为了保持对齐使用多个空格,而右边要求空一个空格;