- php基础语法整理:
- PHP 脚本以 <?php 开始,以 ?> 结束:
- php内部每一行代码以;结束
- php向浏览器的输出命令:echo和print
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
- echo 输出的速度比 print 快, echo 没有返回值,print有返回值1
<?php echo "<h2>PHP 很有趣!</h2>"; echo "Hello world!<br>"; echo "我要学 PHP!<br>"; echo "这是一个", "字符串,", "使用了", "多个", "参数。"; ?> <?php print "<h2>PHP 很有趣!</h2>"; print "Hello world!<br>"; print "我要学习 PHP!"; ?>
- php中的注释和java一致:单行//多行 /** **/
- php的异常处理和java一致:抛异常(throw)和抓异常(try catch)
- catch异常针对多异常可以直接抓Exception也可以分类抓Exception后者可以针对不同的异常进行不同的处理,但是以往经验都是统一处理异常,所以前者使用更多。
- 可以继承Exception自定义自己的实现异常做自己的处理。
- set_exception_handler('myException');此函数可以设置统一处理异常,将代码异常交给参数异常去处理。
- php中Error的处理(详情可以参考下面的文章):
- 使用die函数向用户提示错误提示并直接退出当前php脚本,类似于exit函数。
- 和Android类似可以通过函数set_error_handler()定义自己的错误处理函数,在函数中通过不同的错误级别进行不同的处理。
- 配置php错误日志路径,将php的错误日志记录到配置的路径文件中,也可以通过函数error_log()将php错误写到web服务器的错误日志中去。
- php中的变量:
- php的变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的(Y 是两个不同的变量)
- PHP 没有声明变量的命令,变量在您第一次赋值给它的时候被创建。
- php是弱类型语言,在声明变量的时候不需要声明其类型,且在运行过程中可以修改其数据类型,即:
- 使用函数settype()函数可以中间修改其类型:
- 使用函数gettype()可以获取变量的数据类型
- 使用函数is_type()可以校验变量的数据类型
- "$var = 123; $str = (string)$var;" 可以将int强转为字符串
- 使用intval(), floatval(), strval()等函数可以实现数据类型的转化
- php的变量的作用域:local(局部),global(全局),static(静态),parameter(参数)
- 局部变量很容易理解,函数内声明的变量,函数外不能够访问
- 函数外声明的变量都是全局变量,可以在php外在代码中直接访问,奇葩的是在函数内不能够直接访问,需要通过关键字global声明后才能访问,另外PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
- php的变量规则:
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
?>
- static 静态作用域,即局部变量通常在函数外会失去作用域,但是通过static关键字声明后会保留其作用域用于后续的计算。
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest();
?>
运行结果:0 1 2
- 参数作用域:参数是通过调用代码将值传递给函数的局部变量,参数是在参数列表中声明的,作为函数声明的一部分。
- php的常量:
- PHP 中的常量是指一旦定义后其值不能被改变的标识符
- 不变性: 常量一旦定义,其值不能改变
- 全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用 global 关键字
- 数据类型: 常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上版本)
- 区分大小写: 常量名称默认是区分大小写的。如果需要定义大小写不敏感的常量,可以在 define() 函数的第三个参数设置为 true。
- 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)
- php常量的定义语法:
- 通过函数bool define ( string value [, bool $case_insensitive = false ] ) 定义常量。
define("GREETING", "欢迎访问 Runoob.com"); define("GREETING", "欢迎访问 Runoob.com", true); //php7.3以后仅支持false,即区分大小写字母。
- 通过关键字:const 定义常量: const CONSTANT_NAME = "value";
- 通过函数bool define ( string value [, bool $case_insensitive = false ] ) 定义常量。
- 常量的作用域是全局,且不需要像变量一样需要关键字global声明
- php系统的预定义常量:
PHP_VERSION:当前 PHP 解析器的版本。 PHP_OS:服务器的操作系统。 PHP_INT_MAX:最大的整数值。 E_ERROR、E_WARNING、E_PARSE 等:错误报告级别。
- php的常量可以声明为数组(php7以上版本):const COLORS = [ "Red", "Green", "Blue" ]
- PHP 中的常量是指一旦定义后其值不能被改变的标识符
- php中的特殊常量和特殊变量:
- php中的特殊常量:PHP 向它运行的任何脚本提供了大量的预定义常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
- LINE:当前文件中的行号
- FILE:文件的绝对路径和文件名字
- DIR:当前文件所属的目录,需要注意的是目录没有最后的斜杠\
- FUNCTION:当前执行的函数的名字
- CLASS:当前执行的类的名字
- METHOD:当前执行的方法名字
- NAMESPACE:当前命名空间的名字
- php中的系统全局变量:PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用,即在函数中不需要global声明。下面先简单整理几个超级系统全局变量,后面在使用过程中详细解释对应的变量:
$GLOBALS:函数中可以通过这个变量直接访问全局变量。 $_SERVER:是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目,通过此数组可以获取到和系统相关的参数属性,具体的参考文章 $_REQUEST:PHP $_REQUEST 用于收集HTML表单提交的数据。 $_POST、PHP $_GET:PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"/"method="get",此二者用于api的post和get获取参数。 $_FILES:和file相关的变量声明 $_ENV:和当前系统环境相关的变量声明 $_COOKIE:和cookie相关的变量声明 $_SESSION:和session相关的变量声明。
- php中的特殊常量:PHP 向它运行的任何脚本提供了大量的预定义常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
- php中的数据类型:
- php中数据类型:String(字符串),Integer(整型),Float(浮点型),Boolean(布尔型),Array(数组),Object(对象),NULL(空值),Resource(资源类型)
- php中字符串可以双引号也可以单引号,双引号可以解析变量和转义字符,单引号不行,习惯于用双引号就好。注意php字符串的连接不是+而是.连接,其他可以参考文章php中字符串的常见操作。
- strpos() 函数用于在字符串内查找一个字符或一段指定的文本:echo strpos("Hello world!","world");
- php整型integer和java类似,包括十六进制0x前缀和八进制的0前缀。
- php var_dump() 函数返回变量的数据类型和值
- php 数组:array:单个变量中存储多个值,php中数组包含三种数组:数值数组,关联数组,多维数组。
- $array = array(1,2,3,4) 创建一个int数组,通过函数array()创建数组
- 如上创建的则是数值数组,对应每一个item都有一个下标指向访问,从0开始
- count()函数可以获取数组的大小
- 数值数组的遍历:通过count获取其长度后通过for循环进行遍历
- 关联数组:即每一个item都有其对应的key和value,类似于java中的map,即:$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");此时通过每一个item的key进行访问数组的每一个item
- 关联数组的遍历:使用强循环foreach进行循环遍历:
<?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?>
- 多维数组:类似于java中的多维数组,此处主要学习二维数组。
- 二维数组:数组的每一个元素item也是一个数组,被称为二维数组。
- 二维数组的声明和遍历和排序:
//二维数组的声明: array ( array (elements...), array (elements...), ... ) // 二维数组的遍历: <?php $twoDimensionalArray = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; foreach ($twoDimensionalArray as $row) { foreach ($row as $element) { echo $element . ' '; } echo "\n"; // 换行,用于分隔不同的行 } ?> // 二维数组的排序: $array = array( array('name' => 'John', 'age' => 20), array('name' => 'Sally', 'age' => 18), array('name' => 'Mark', 'age' => 25) ); // 按照age键的值进行升序排序 usort($array, function($a, $b) { return $a['age'] - $b['age']; }); print_r($array);
- 数组的排序:通过php通过的函数对不同类型数组进行排序:
sort() - 对数组进行升序排列 rsort() - 对数组进行降序排列 asort() - 根据关联数组的值,对数组进行升序排列 ksort() - 根据关联数组的键,对数组进行升序排列 arsort() - 根据关联数组的值,对数组进行降序排列 krsort() - 根据关联数组的键,对数组进行降序排列
- php中的对象的声明和java类似,通过class声明,声明后有其属性和函数:this指向当前的class。
<?php class Car { var $color; function __construct($color="green") { $this->color = $color; } function what_color() { return $this->color; } } ?>
- php资源类型:PHP 资源 resource 是一种特殊变量,保存了到外部资源的一个引用,常见资源数据类型有打开文件、数据库连接、图形画布区域等。get_resource_type(resource $handle): string
<?php $c = mysql_connect(); echo get_resource_type($c)."\n"; // 打印:mysql link $fp = fopen("foo","w"); echo get_resource_type($fp)."\n"; // 打印:file $doc = new_xmldoc("1.0"); echo get_resource_type($doc->doc)."\n"; // 打印:domxml document ?>
- php中的类型比较:松散比较(==)和严格比较(===),前者比较变量的值,后者比较值的同时比较变量的数据类型。比如42=='42'返回true 若是42==='42'则是返回false,二者值相同,类型不相同。
参考文章:
php中的超级全局变量
php中error的处理