PHP学习

PHP 教程

基本尝试

  1. PHP 脚本以 结尾

  2. PHP 文件的默认文件扩展名是 ".php"。

  3. PHP 语句以分号结尾(;)

  4. PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。

  5. PHP注释, 支持//,#,/* */

常量

常量是单个值的标识符(名称)。在脚本中无法改变该值。

define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
  1. 如需设置常量,请使用 define() 函数 - 它使用三个参数:
    1. 首个参数定义常量的名称
    2. 第二个参数定义常量的值
    3. 可选的第三个参数规定常量名是否对大小写敏感。默认是 false。

变量

  1. 大小写
    在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。不过在 PHP 中,所有变量都对大小写敏感。

  2. 定义变量
    PHP 没有创建变量的命令。变量会在首次为其赋值时被创建。

<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
  1. PHP 变量规则:
    a. 变量以 $ 符号开头,其后是变量的名称
    a. 变量名称必须以字母或下划线开头
    a. 变量名称不能以数字开头
    a. 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
    a. 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
    a. 不必告知 PHP 变量的数据类型, PHP 根据它的值,自动把变量转换为正确的数据类型
    a. PHP 是一门类型松散的语言

  2. 作用域
    a. local(局部)- 函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
    1. global 关键字可以将局部变量变为全部变量 global $x,$y;
    a. global(全局)- 函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
    a. static(静态)- 函数中定义的静态变量在第一次调用后就一直存在,不会像局部变量一个样在执行完后删除。

  3. $GLOBALS数组
    PHP 同时在名为 $GLOBALS[indexName] 的数组中存储了所有的全局变量。可以通过这个数组直接操作全部变量。$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];

  4. 检测变量类型

$x = 10.365;
var_dump($x);

数据类型

  1. 整型,浮点型,字符串,布尔,null

  2. PHP NULL 值,特殊的 NULL 值表示变量无值。
    NULL 值标示变量是否为空。也用于区分空字符串与空值数据库。可以通过把值设置为 NULL,将变量清空

  3. 数组

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

字符串

PHP的字符串函数太全面了,查找、转换、加密、格式

  1. 支持单引号或双引号

  2. 字符串拼接使用的不是+,而是.: echo "Stored in: " . "upload/";

  3. 字符串中的变量名在echo时直接转换为其值

  4. strlen() - 字符串长度 strlen("Hello world!");

  5. strpos() - 查找索引位置 echo strpos("Hello world!","world");

  6. substr() - 字符串截取 echo substr("Hello world",6,3); //wor

  7. str_split() - 把字符串分割到数组中。

  8. join() - implode() 的别名。返回由数组元素组合成的字符串。

  9. str_replace() - 替换字符串中的一些字符(对大小写敏感)。

  10. str_repeat() - 把字符串重复指定的次数。

输出DOM

  1. 输出方法 echo 和 print

    1. echo - 能够输出一个以上的字符串
    2. print - 只能输出一个字符串,并始终返回 1
    3. 提示:echo 比 print 稍快,因为它不返回任何值。
    4. echo/print 是一个语言结构,有无括号均可使用:echo 或 echo() / print 或 print()
  2. echo/print 命令来显示字符串和变量:

$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");
echo $txt1;
//
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");
print $txt1;
//
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";

PHP class

  1. class的定义,函数的定义,默认参数的设定,操作对象属性
class Car
{
  var $color;
  function Car($color="green", $name) {
    $this->color = $color;
    echo $name;
  }
  function what_color() {
    return $this->color;
  }
}

PHP 逻辑运算符 - 支持两套,也是醉了啊

数组操作

  1. PHP 数组运算符

  2. 数组定义 $cars=array("Volvo","BMW","SAAB");

  3. 在 PHP 中,有三种数组类型:

    1. 索引数组 - 带有数字索引的数组 - $cars=array("Volvo","BMW","SAAB");$cars[0]="Volvo";
    2. 关联数组 - 带有指定键的数组 - $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");$age['Peter']="35";
    3. 多维数组 - 包含一个或多个数组的数组
  4. 数组长度 echo count($cars);

  5. 数组遍历

$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
  echo $cars[$x];
}
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
  echo "Key=" . $x . ", Value=" . $x_value;
}
  1. 数组独有的foreach循环
$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value) {
  echo 123;
}
  1. 数组排序
    1. 升序 - sort($cars);
    2. 降序 - rsort($cars);
    3. 值升序 - asort($age);
    4. 值降序 - arsort($age);
    5. 键升序 - ksort($age);
    6. 键降序 - krsort($age);

系统变量 - PHP 全局变量 - 超全局变量

  1. $GLOBALS - 全局变量的关联数组
  2. $_SERVER - 保存关于报头、路径和脚本位置的信息的关联数组。
  3. $_REQUEST - 请求表单input信息,$_REQUEST['fname']
  4. $_POST - post请求的数据
  5. $_GET - post请求的数据
  6. $_FILES
  7. $_ENV
  8. $_COOKIE
  9. $_SESSION

常用特殊函数

  1. htmlspecialchars() 函数 - 将特殊字符转码
    htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

  2. stripslashes() 函数)删除字符串中的反斜杠()

  3. empty() 检查是否为空

  4. preg_match("/[1]*$/",$name) - 正则式匹配

日期+时间

  1. date(format,[timestamp])

    1. format必需。规定时间戳的格式。
    2. timestamp 可选。规定时间戳。默认是当前时间和日期。
  2. format形式

    1. d - 表示月里的某天(01-31)
    2. m - 表示月(01-12)
    3. Y - 表示年(四位数)
    4. 1 - 表示周里的某天
    5. h - 带有首位零的 12 小时小时格式
    6. i - 带有首位零的分钟
    7. s - 带有首位零的秒(00 -59)
    8. a - 小写的午前和午后(am 或 pm)
  3. 实例

echo "今天是 " . date("Y/m/d");
echo "今天是 " . date("Y.m.d");
echo "今天是 " . date("Y-m-d");
echo "今天是 " . date("l");
date_default_timezone_set("Asia/Shanghai");
echo "当前时间是 " . date("h:i:sa");
  1. 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);
  1. Unix 时间戳包含 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)与指定时间之间的秒数。

  2. strtotime() 用字符串来创建日期的Unix 时间戳 strtotime(time,now)

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

include 和 require

通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。包含文件省去了大量的工作。这意味着您可以为所有页面创建函数、标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。

include 和 require 语句是相同的,除了错误处理方面:
1. require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
1. include 只生成警告(E_WARNING),并且脚本会继续

语法:

include 'filename';
require 'filename';

文件操作

  1. 文件读写模式对照表

  2. fopen() - 函数为您提供比 readfile() 函数更多的选项。fopen() 函数也用于创建文件。

  3. fread() 函数读取打开的文件。第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

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

  5. fgets() 函数用于从文件读取单行。

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

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

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 输出单字符直到 end-of-file
while(!feof($myfile)) {
  echo fgetc($myfile);
}
fclose($myfile);
  1. fwrite() 函数用于写入文件。第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串。

  2. 默认的fwrite会覆盖原有的内容

文件上传

利用全局数组 $_FILES获取提交的文件对象

  1. $_FILES对象的属性

    1. $_FILES["filename"]["name"] - 被上传文件的名称
    2. $_FILES["filename"]["type"] - 被上传文件的类型
    3. $_FILES["filename"]["size"] - 被上传文件的大小,以字节计
    4. $_FILES["filename"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
    5. $_FILES["filename"]["error"] - 由文件上传导致的错误代码
  2. 上传实例代码

//对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    //
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
  1. setcookie() 函数用于设置 cookie。
    注释:setcookie() 函数必须位于 标签之前。
    格式:setcookie(name, value, expire, path, domain);
<?php 
setcookie("user", "Alex Porter", time()+3600);
?>
<html>
<body>
</body>
</html>

注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。

  1. 服务端读取cookie - $_COOKIE
<html>
<body>
<?php
//使用 isset() 函数来确认是否已设置了 cookie
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
  echo "Welcome guest!<br />";
?>
</body>
</html>
  1. 删除cookie - 当删除 cookie 时,您应当使过期日期变更为过去的时间点。
<?php 
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>

Sessions

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

  1. 启动session - session_start() 函数必须位于 标签之前
<?php session_start(); ?>
<html>
<body>
</body>
</html>
  1. session存取 - $_SESSION
//访问计数器
<?php
session_start();
if(isset($_SESSION['views']))
  $_SESSION['views']=$_SESSION['views']+1;
else
  $_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
  1. 清除session - unset() 或 session_destroy() 函数。
    1. unset() 函数用于释放指定的 session 变量 - unset($_SESSION['views']);
    2. session_destroy() 将重置 session,您将失去所有已存储的 session 数据 - session_destroy();

错误处理

三种不同的错误处理方法:

  1. 简单的 "die($msg)" 语句 - 返回错误消息并终止脚本
<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>
  1. 自定义错误和错误触发器
    格式:error_function(error_level,error_message,error_file,error_line,error_context)

    错误报告级别
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }
  1. 修改默认的错误处理函数 - set_error_handler("customError");
<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr";
 }
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
  1. 触发错误 - ``trigger_error($msg,[$level]);`
    可能的错误类型:
    a. E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。
    a. E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。
    a. E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。
<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
  1. 错误记录和报告
    默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法。
<?php
//通过 E-Mail 发送错误消息
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Webmaster has been notified";
 error_log("Error: [$errno] $errstr",1,
 "someone@example.com","From: webmaster@example.com");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>

异常处理

当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。

  1. 异常处理实例
<?php
//创建可抛出一个异常的函数
function checkNum($number)
 {
 if($number>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();
 }
?>
  1. 自定义异常
<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
  .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
  return $errorMsg;
  }
 }
$email = "someone@example...com";
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();
 }
?>
  1. 设置顶层异常处理器 (Top Level Exception Handler) - set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>

过滤器(Filter)

PHP 过滤器用于验证和过滤来自非安全来源的数据。验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。设计 PHP 的过滤器扩展的目的是使数据过滤更轻松快捷。

  1. 函数和过滤器
    如需过滤变量,请使用下面的过滤器函数之一:

    1. filter_var() - 通过一个指定的过滤器来过滤单一的变量
    2. filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
    3. filter_input - 获取一个输入变量,并对它进行过滤
    4. filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
  2. 验证整型的实例

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

  1. a-zA-Z ↩︎

原文地址:https://www.cnblogs.com/wancy86/p/php.html