php学习笔记

php 基础教程

php文件如何在浏览器运行
将php文件放进c:\\wamp64\www中,在浏览器输入http://localhost/xxx xxx:文件名即可在浏览器运行php文件


支持三种注释



大小写敏感

  • 所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感
  • 所有变量都对大小写敏感

变量是存储数据的容器

  • 变量以 $ 符号开头,其后是变量的名称
  • 变量名称必须以字母或下划线开头
  • 变量名称不能以数字开头
  • 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
  • 变量名称对大小写敏感(Y 是两个不同的变量)


创建变量

  • 没有创建变量的命令,变量会在首次为其赋值时被创建
  • 如果为变量赋的值是文本,需用引号包围该值
  • 变量会被主动转换成正确的数据类型,不必声明

变量作用域
有三种不同的变量作用域:

  • local(局部)- 函数内部声明的,只能在函数内部进行访问
  • global(全局)- 函数之外声明的,只能在函数以外进行访问
  • static(静态)

要在函数内部访问全局变量,要用global关键词


PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量:


通常,当函数完成/执行后,会删除所有变量。如果不想被删除,需用static关键词:

  • 每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息
  • 该变量仍然是函数的局部变量

输出 echo 和 print

  • echo - 能够输出一个以上的字符串
  • print - 只能输出一个字符串,并始终返回 1

echo
echo, echo()均可使用
显示字符串(字符串中能包含HTML标记):

wtf!";
echo "wtttttttf
"; echo "This", " string", " was", " made", " with multiple parameters."; //输出 This string was made with multiple parameters. ?>

显示变量:

";
echo "My car is a {$cars[0]}";
?>

注意{$cars[0]}

print
print, print()均可使用
其他输出与echo无差,但不能输出以下:

print "my", " name"," is"; //非法

数据类型
字符串、整数、浮点数、逻辑、数组、对象、NULL

字符串
单双引号均可

整数

  • 整数必须有至少一个数字(0-9)
  • 整数不能包含逗号或空格
  • 整数不能有小数点
  • 整数正负均可
  • 可以用三种格式规定整数:十进制、十六进制(前缀是 0x)或八进制(前缀是 0)

var_dump() 会返回变量的数据类型和值

"; 
$x = 0x8C; // 十六进制数 返回140
var_dump($x);
echo "
"; $x = 047; // 八进制数 返回39 var_dump($x); ?>

浮点数
有小数点或指数形式的数字

"; 
$x = 8E-5;
var_dump($x); //返回8.0E-5
?>

逻辑
true 或 false

数组
$cars=array("Volvo","BMW","SAAB");

对象
存储数据和有关如何处理数据的信息

php中必须明确地声明对象:

  • 首先声明对象的类,用 class 关键词
  • 然后在对象类中定义数据类型,再在该类的实例中使用此数据类型
color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>

NULL
表示变量无值


字符串函数

  • strlen() 函数返回字符串的长度,以字符计(包括空格和标点符号)
  • str_word_count() 函数对字符串中的单词进行计数
  • strrev() 函数反转字符串
  • strpos()函数用于检索字符串内指定的字符或文本,第一位是0。如果未找到匹配,则将返回 FALSE。
echo strpos("Hello world!","world");
  • str_replace() 函数用一些字符串替换字符串中的另一些字符
echo str_replace("world", "Kitty", "Hello world!"); // 输出 Hello Kitty!

PHP String 参考手册


常量

  • 常量类似变量,但是常量一旦被定义就无法更改或撤销定义
  • 有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)
  • 与变量不同,常量贯穿整个脚本是自动全局的,在函数外定义也可以在函数内使用

设置常量
define()有三个参数:

  • 首个参数定义常量的名称
  • 第二个参数定义常量的
  • 可选的第三个参数规定常量名是否对大小写不敏感,默认是 false。
    false或不写 - 敏感, true - 不敏感


运算符

算术运算符:
+ - * / %

赋值运算符:
= += -= *= /= %=

字符串运算符:

 

递增/递减运算符:

  • ++$x 前递增, $x 加一递增,然后返回 $x
  • $x++ 后递增, 返回 $x,然后 $x 加一递增
  • --$x 前递减, $x 减一递减,然后返回$x
  • $x-- 后递减 , 返回 $x,然后 $x 减一递减

比较运算符:
输出布尔值
除了其他常见的,还有<> - 不等于

逻辑运算符:
and,oy, xor(异或),&&,||,!

数组运算符:
用于比较数组

联合+:

$x = array("a" => "apple", "b" => "banana");  
$y = array("c" => "orange", "d" => "peach");  
print_r($x + $y); // 联合 $x 和 $y,不能用echo

相等 =:

var_dump($x == $y); //输出bool(false)

全等===
不相等!=<>
不全等!==


if...else...elseif

  • if (条件) {
    当条件为 true 时执行的代码;
    }
  • if (条件) {
    条件为 true 时执行的代码;
    } else {
    条件为 false 时执行的代码;
    }
  • if (条件) {
    条件为 true 时执行的代码;
    } elseif (condition) {
    条件为 true 时执行的代码;
    } else {
    条件为 false 时执行的代码;
    }

Switch

switch (expression)
{
case label1:
expression = label1 时执行的代码 ;
break;
case label2:
expression = label2 时执行的代码 ;
break;
default:
表达式的值不等于 label1 及 label2 时执行的代码;
}


While

  • while (条件为真) {
    要执行的代码;
    }
  • do {
    要执行的代码;
    } while (条件为真);
    先执行代码块再检查条件,如果条件为真就继续循环。

For

for (init counter; test counter; increment counter) {
code to be executed;
}


Foreach
foreach 循环只适用于数组,并用于遍历数组中的每个键/值对

foreach ($array as $value) {
code to be executed;
}

每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。

$colors = array("red","green","blue","yellow"); 

foreach ($colors as $value) {
   echo "$value 
"; } /* 输出red green blue yellow */

函数

  • 用户定义的函数声明以单词 function 开头
  • 函数名能够以字母或下划线开头(而非数字)
  • 函数名对大小写不敏感
  • 可以在括号内部添加多个参数,用逗号隔开
  • 默认参数形如 $minheight=50,如果调用函数时没有写入参数值,则使用默认参数值
  • 返回值用return

function functionName($fname) {
被执行的代码;
}


数组
创建数组:

$cars=array("porsche","BMW","Volvo");

count() 函数用于返回数组的长度(元素数)

关联数组

$age=array("Bill"=>"35","Steve"=>"37","Elon"=>"43");
//或者
$age['Bill']="63";
$age['Steve']="56";
$age['Elon']="47";

// 在脚本中使用指定值
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
echo "Elon is " . $age['Elon'] . " years old.";

遍历关联数组

$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");

foreach($age as $x=>$x_value) {
  echo "Key=" . $x . ", Value=" . $x_value;
  echo "
"; }

PHP 数组参考手册
多维数组


数组排序
数组中的元素能够以字母或数字顺序进行升序或降序排序

sort() - 以升序对数组排序
对于字符,先大写再小写
对于数字,先只有一位,再两位,再...

$cars=array("porsche","BMW","Volvo","Ass","ass");
sort($cars);
​
$clength=count($cars);
for($x=0;$x<$clength;$x++)
   {
   echo $cars[$x];
   echo "
"; } //输出结果:Ass BMW Volvo ass porsche(一个一行)

rsort() - 以降序对数组排序
与上面的相反
先小写再大写、先位数高的再只有一位的

asort() - 根据值对数组进行升序排序
ksort() - 根据键对数组进行升序排序
arsort() - 根据值对数组进行降序排序
krsort() - 根据键对数组进行降序排序


超全局
超全局意味着在一个脚本的全部作用域中都可用

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

$GLOBALS - 引用全局作用域中可用的全部变量
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

$x = 30;
$y = 65; 

function addition() {
   $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z; //由于 z 是 $GLOBALS 数组中的变量,因此在函数之外也可以访问它

$_SERVER - 保存关于报头、路径和脚本位置的信息

$_REQUEST - 用于收集 HTML 表单提交的数据
当用户通过点击提交按钮来提交表单数据时, 表单数据将发送到

标签的 action 属性中指定的脚本文件,使用超级全局变量 $_REQUEST 来收集 input 字段的值:





Name: 







$_POST - 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据,也常用于传递变量




Name:

$_GET - 用于收集提交 HTML 表单 (method="get") 之后的表单数据, 也可以收集 URL 中的发送的数据




测试 $GET



当点击链接 "测试 $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后就能够通过 $_GET 在 "test_get.php" 中访问这些值了。



php 表单

表单处理
$_GET 和 $_POST 用于收集表单数据




Name:
E-mail:

当用户填写此表单并点击提交按钮后,表单数据会发送到名为 "welcome.php" 的 PHP 文件供处理。表单数据是通过 HTTP POST 方法发送的。

如需显示出被提交的数据,您可以简单地输出(echo)所有变量。"welcome.php" 文件是这样的:




Welcome 
Your email address is:

表单验证
验证规则:

  • Name 必需 必须包含字母和空格。
  • E-mail 必需 必须包含有效的电子邮件地址(包含 @ 和 .)。
  • Website 可选 如果选填,则必须包含有效的 URL。
  • Comment 可选。多行输入字段(文本框)。
  • Gender 必需 必须选择一项。
Name: 
E-mail: 
Website: 
Comment: 

Gender:
Female
Male

表单元素

">

当提交此表单时,通过 method="post" 发送表单数据
htmlspecialchars()函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 <> 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。


验证函数
*(通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
*(通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)



表单必填



显示错误消息

">

Name: 
* 


E-mail: *

Website:


表单URL/email

验证名字

$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
  $nameErr = "只允许字母和空格!"; 
}

验证email

$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
  $emailErr = "无效的 email 格式!"; 
}

验证URL

$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
=~_|]/i",$website)) {
  $websiteErr = "无效的 URL"; 
}

表单完成 - 保留表单中的值

Name: 

E-mail: 

Website: 

Comment: 

Gender:


value="female">Female

value="male">Male


php高级教程

二维数组

$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );

用两个索引访问
使用For循环来遍历元素:

for ($row = 0; $row <  4; $row++) {
        for ($col = 0; $col <  3; $col++) {
            echo $cars[$row][$col];
            echo "
"; } }

日期
date(format,timestamp)

  • format 必需。规定时间戳的格式。
  • timestamp 可选。规定时间戳。默认是当前时间和日期。
  • d - 表示月里的某天(01-31)
    m - 表示月(01-12)
    Y - 表示年(四位数)
    1 - 表示周里的某天
echo "今天是 " . date("Y-m-d") . "
"; echo "今天是 " . date("l");

获得简单时间
h - 带有首位零的 12 小时小时格式
i - 带有首位零的分钟
s - 带有首位零的秒(00 -59)
a - 小写的午前和午后(am 或 pm)

echo "现在时间是 " . date("h:i:sa");

获得时区

date_default_timezone_set("Asia/Shanghai");
echo "当前时间是 " . date("h:i:sa");

创建日期
mktime() 函数返回日期的 Unix 时间戳
mktime(hour,minute,second,month,day,year)

$d=mktime(9, 12, 31, 6, 10, 2015);
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);

strtotime()函数用于把人类可读的字符串转换为 Unix 时间

$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);

PHP 日期参考手册


**include, require **
可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)

  • require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
  • include 只生成警告(E_WARNING),并且脚本会继续

include
"footer.php" 文件:

Copyright © 2006-" . date("Y") . " W3School.com.cn

"; ?>

如需在一张页面中引用这个页脚文件,使用 include 语句:




欢迎访问首页

可以用div元素,这样可以通过CSS设置样式:


假设 "vars.php" 文件中定义了一些变量:


引用这个 "vars.php" 文件,就可以在调用文件中使用这些变量:


如果使用 require 语句完成相同的案例,echo 语句不会继续执行,因为在 require 语句返回严重错误之后脚本就会终止执行。


文件

readfile() - 读取文件,并把它写入输出缓冲
"webdictionary.txt" 文本文件存放在服务器上:

AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language

读取此文件并写到输出流的 PHP 代码如下(如读取成功则 readfile() 函数返回字节数):


输出:

AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language236

PHP Filesystem 参考手册


文件打开/读取/关闭

fopen() - 打开文件
第一个参数包含被打开的文件名,第二个参数规定打开文件的模式:
r 打开文件为只读。文件指针在文件的开头开始。
w 打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。
a 打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。
x 创建新文件为只写。返回 FALSE 和错误,如果文件已存在。
r+ 打开文件为读/写、文件指针在文件开头开始。
w+ 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。
a+ 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。
x+ 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。

fread() 函数读取打开的文件
第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。
如下 PHP 代码把 "webdictionary.txt" 文件读至结尾:

fread($myfile,filesize("webdictionary.txt"));

fclose() 函数用于关闭打开的文件

fgets() 函数用于从文件读取单行
下例输出 "webdictionary.txt" 文件的首行:


调用 fgets() 函数之后,文件指针会移动到下一行

feof() 函数检查是否已到达 "end-of-file" (EOF)

";
}
fclose($myfile);
?>

fgetc() 函数用于从文件中读取单个字符


文件创建/写入

fopen() 函数也用于创建文件
创建名为 "testfile.txt" 的新文件。此文件将被创建于 PHP 代码所在的相同目录中:

$myfile = fopen("testfile.txt", "w");

fwrite() 函数用于写入文件
第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串



文件上传

创建一个文件上传表单

标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,使用 multipart/form-data

创建上传脚本

 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "
"; } else { echo "Upload: " . $_FILES["file"]["name"] . "
"; echo "Type: " . $_FILES["file"]["type"] . "
"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; } ?>

通过使用 PHP 的全局数组 $_FILES,可以从客户计算机向远程服务器上传文件。

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型

给文件上传增加限制

// 用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))

Cookies
cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

setcookie() - 创建cookies,必须位于 标签之前

setcookie(name, value, expire, path, domain);

创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。也规定此 cookie 在一小时后过期:








$_COOKIE 变量用于取回 cookie 的值


使用 isset() 函数来确认是否已设置了 cookie:




";
else
  echo "Welcome guest!
"; ?>

删除 cookie - 使过期日期变更为过去的时间点



session
session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
工作机制:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

开始 PHP Session
session_start() 函数必须位于 标签之前:








存储 Session 变量 - 使用 $_SESSION 变量










isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,累加计数器。如果 "views" 不存在,则创建 "views" 变量并把它设置为 1:


终结 Session
unset() 函数用于释放指定的 session 变量:


也可以通过 session_destroy() 函数重置 session,将失去所有已存储的 session 数据:



error

die() - 基本的错误处理


创建自定义错误处理器

  • error_level 必需。为用户定义的错误规定错误报告级别。必须是一个值数。
  • error_message 必需。为用户定义的错误规定错误消息。
  • error_file 可选。规定错误在其中发生的文件名。
  • error_line 可选。规定错误发生的行号。
  • error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
Error: [$errno] $errstr";
 }

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

trigger_error() - 触发错误

1)
{
trigger_error("Value must be 1 or below");
}
?>

错误记录
默认根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。使用 error_log() 函数,可以向指定的文件或远程目的地发送错误记录。

通过email发送错误信息:

function customError($errno, $errstr)
 { 
 echo "Error: [$errno] $errstr
"; echo "Webmaster has been notified"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); }

异常(Exception) - 用于在指定的错误发生时改变脚本的正常流程

正确的处理程序应当包括:

  • Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
  • Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
  • Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }

//在 "try" 代码块中触发异常
try
 {
 checkNum(2);
 //If the exception is thrown, this text will not be shown
 echo 'If you see this, the number is 1 or below';
 }

//捕获异常
catch(Exception $e)
 {
 echo 'Message: ' .$e->getMessage();
 }
?>

创建一个自定义的 Exception 类

getLine().' in '.$this->getFile()
  .': '.$this->getMessage().' is not a valid E-Mail address';
  return $errorMsg;
  }
 }

$email = "[email protected]";

try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 }

catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

多个异常

getLine().' in '.$this->getFile()
.': '.$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "[email protected]";

try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
  {
  throw new Exception("$email is an example e-mail");
  }
 }

catch (customException $e)
 {
 echo $e->errorMessage();
 }

catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>

你可能感兴趣的:(php学习笔记)