zoukankan      html  css  js  c++  java
  • 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 ↩︎

  • 相关阅读:
    setTimeout详解
    【康娜的线段树】
    【[CQOI2016]手机号码】
    【[IOI2014]Wall 砖墙】
    【[1007]梦美与线段树】
    【[POI2010]ANT-Antisymmetry】
    【[HEOI2016/TJOI2016]排序】
    【[SCOI2016]背单词】
    【[HNOI2008]GT考试】
    【[JSOI2007]建筑抢修】
  • 原文地址:https://www.cnblogs.com/wancy86/p/php.html
Copyright © 2011-2022 走看看