php
一.基本语法
<?php
// PHP 代码
?>
1.变量规则
-
以符号$开始+变量名
-
字母/下划线+字母/数字/下划线
-
不能有空格
-
大小写敏感
不用声明变量,第一次赋值时直接被创建
-
全局变量和内部变量(local):函数内声明全局变量需要用 global关键字或者使用 $GLOBALS[index] 数组
全局变量会被局部变量覆盖
<?php $a=5; $b=3; function t() { echo $a-$b; // 输出结果为 0,如果要在函数中使用全局变量见上 } t(); ?>
-
函数完成后,变量会被删除,使用static来防止删除(仍然是局部变量
- echo和print
echo | ||
---|---|---|
输出字符 | 一个或者多个字符串 | 一个 |
返回值 | 无返回值 | 1 |
速度 | 更快 | 慢 |
EOF(在命令行或侧程序语言里定义字符串)
<?php
$name="runoob";
$a= <<<EOF
"abc"$name
"123"
EOF; //也可以用EOD,EOT,JSON等表示,在正文中不出现即可
// 结束需要独立一行且前后不能空格
echo $a;
?>
数据类型
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- Resource(资源类型)
类型比较:
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
PHP 用函数 var_dump()函数返回变量的数据类型和值:
***注:***字符串文 0 是转换为布尔值的特殊情况,它转换为 false。
常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
注意:常量前不能加$ 如果加了$使用,会导致报错魔术常量:
魔术常量:
字符串:
strlen() 函数:返回字符串的长度(字节数)。
strpos() 函数:用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
<?php
echo strpos("Hello world!","world");
//输出为6,从0开始
?>
运算符:
<?php
// 优先级: && > = > and
// 优先级: || > = > or
$a = 3;
$b = false;
$c = $a or $b;
var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d); //这里的 $d 就是 boolean 值 true
?>
判断语句:
if…else;switch;for
PHP - 数组排序函数:
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
PHP函数:php的真正威力,内置1000多函数,数组互相操作等等…
还可以自建函数
魔术常量
命名空间
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
PHP测验错误:
- 换行:PHP_EOL
- 键名将被这样转换:null 转为(空字符串),true 转为 1,false 转为 0。
2.PHP表单
php用户输入
$_GET(会在url中显示) $_POST
表单元素
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
//htmlspecialchars:把&转义为&等;
//_SERVER["PHP_SELF:超级全局变量,返回当前正在执行的脚步文件名
表单验证
//preg_match — 进行正则表达式匹配。
int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
//在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。如果提供了 matches ,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
高级
1.多维数组’
2.日期
string date ( string $format [, int $timestamp ] )
<?php
echo date("Y/m/d") . "<br>";
echo date("Y.m.d") . "<br>";
echo date("Y-m-d");
?>
//不同的格式
3.包含(抽取公共部分
include 和 require 的区别
- require 一般放在 PHP 文件的最前面,程序在执行前就会先导入要引用的文件;
- include 一般放在程序的流程控制中,当程序执行时碰到才会引用,简化程序的执行流程。
- require 引入的文件有错误时,执行会中断,并返回一个致命错误;
- include 引入的文件有错误时,会继续执行,并返回一个警告。
4.文件处理
<?php
$file = fopen("test.txt","r"); //打开文件,后一个为对文件的状态,只读/读写/只写
//执行一些代码,
fclose($file); //关闭文件
?>
5.文件上传
6.Cokkie和session
session:
/// 必须启动session
<?php session_start(); ?>
<html>
<body>
</body>
</html>
//销毁session;2选1
<?php
unset($_SESSION['views']);//释放指定变量
session_destroy(); //彻底销毁session
?>
cookie识别用户,
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果 主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
7.错误处理
error_function(error_level,error_message,
error_file,error_line,error_context)
error_level | 必需 | 为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。 |
error_message | 必需 | 为用户定义的错误规定错误消息。 |
error_file | 可选 | 规定错误发生的文件名。 |
error_line | 可选 | 规定错误发生的行号。 |
error_context | 可选 | 规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
8异常
Try :使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Throw :规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”。
Catch : “catch” 代码块会捕获异常,并创建一个包含异常信息的对象。
1.简单的try catch
2.自定义一个customException()类来捕捉异常(可以提示行号,输入结果等等)
3.使用if/else或switch捕获不同的异常
4。try{try catch} catch(再次抛出对用户更能接受的异常)
9.过滤器
通过指定的函数过滤外来数据:
Validating 过滤器:
- 用于验证用户输入
- 严格的格式规则(比如 URL 或 E-Mail 验证)
- 如果成功则返回预期的类型,如果失败则返回 FALSE
Sanitizing 过滤器: - 用于允许或禁止字符串中指定的字符
- 无数据格式规则
- 始终返回字符串
清理数据
用filter_input清洗从表单接受到的数据
<?php
if(!filter_has_var(INPUT_GET, "url"))
{
echo("没有 url 参数");
}
else
{
$url = filter_input(INPUT_GET,
"url", FILTER_SANITIZE_URL);
echo $url;
}
过滤过个
<?php
$filters = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING //指定输入的过滤
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL
);
//调用 filter_input_array() 函数,参数包括 GET 输入变量及刚才设置的数组
$result = filter_input_array(INPUT_GET, $filters);
//检测 $result 变量中的 "age" 和 "email" 变量是否有非法的输入。(如果存在非法输入,在使用 filter_input_array() 函数之后,输入变量为 FALSE。)
if (!$result["age"])
{
echo("年龄必须在 1 到 120 之间。<br>");
}
elseif(!$result["email"])
{
echo("E-Mail 不合法<br>");
}
else
{
echo("输入正确");
}
?>
注意: filter_Input_array()的第二个参数
如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。
如果该参数是一个数组,那么此数组必须遵循下面的规则:
必须是一个关联数组,其中包含的输入变量是数组的键(比如 “age” 输入变量)
此数组的值必须是过滤器的 ID ,或者是规定了过滤器、标志和选项的数组
使用 Filter Callback
通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
您可以创建自己的自定义函数,也可以使用已存在的 PHP 函数。
将您准备用到的过滤器的函数,按指定选项的规定方法进行规定。在关联数组中,带有名称 “options”。
<?php
function convertSpace($string)
{
return str_replace("_", ".", $string);
}
$string = "www_runoob_com!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>
:通过各种函数对表达传过来的数据进行过滤,清洗或者说是替换等操作。
JSON
|json_encode| 对变量进行 JSON 编码 |
| — | — |—
| json_decode | 对 JSON 格式的字符串进行解码,转换为 PHP 变量 |
| json_last_error | 返回最后发生的错误 |
//语法:成功返回数据,失败则返回FALSE
string json_encode ( $value [, $options = 0 ] )
json_decode:对json字符串解码
mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
- json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数据
- assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。
- depth: 整数类型的参数,它指定递归深度
- options: 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
输出:
object(stdClass)#1 (5) {
[“a”] => int(1)
[“b”] => int(2)
[“c”] => int(3)
[“d”] => int(4)
[“e”] => int(5)
}
array(5) {
[“a”] => int(1)
[“b”] => int(2)
[“c”] => int(3)
[“d”] => int(4)
[“e”] => int(5)
}
6.6
杂项 text
单箭头:引用类的属性和方法,
双箭头:定义数组,声明数组时用
foreach遍历数组