PHP Study

来源:互联网 发布:美国航空怎么样知乎 编辑:程序博客网 时间:2024/06/08 01:15

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

在下面的例子中,所有这三条 echo 语句都是合法的(等价):

<!DOCTYPE html><html><body><?phpECHO "Hello World!<br>";echo "Hello World!<br>";EcHo "Hello World!<br>";?></body></html>

不过在 PHP 中,所有变量都对大小写敏感。

在下面的例子中,只有第一条语句会显示 $color 变量的值(这是因为 $color、$COLOR 以及 $coLOR 被视作三个不同的变量):

<!DOCTYPE html><html><body><?php$color="red";echo "My car is " . $color . "<br>";echo "My house is " . $COLOR . "<br>";echo "My boat is " . $coLOR . "<br>";?></body></html>

PHP 变量规则:

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

注释:PHP 变量名称对大小写敏感!


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

  • local(局部)
  • global(全局)
  • static(静态)

Local 和 Global 作用域

函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。

函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。

下面的例子测试了带有局部和全局作用域的变量:

<?php$x=5; // 全局作用域function myTest() {  $y=10; // 局部作用域  echo "<p>测试函数内部的变量:</p>";  echo "变量 x 是:$x";  echo "<br>";  echo "变量 y 是:$y";} myTest();echo "<p>测试函数之外的变量:</p>";echo "变量 x 是:$x";echo "<br>";echo "变量 y 是:$y";?>

PHP global 关键词

global 关键词用于访问函数内的全局变量。

要做到这一点,请在(函数内部)变量前面使用 global 关键词:

<?php$x=5;$y=10;function myTest() {  global $x,$y;  $y=$x+$y;}myTest();echo $y; // 输出 15?>

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

上面的例子可以这样重写:

<?php$x=5;$y=10;function myTest() {  $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];} myTest();echo $y; // 输出 15?>

PHP static 关键词

通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要更进一步的工作。

要完成这一点,请在您首次声明变量时使用 static 关键词:

<?phpfunction myTest() {  static $x=0;  echo $x;  $x++;}myTest();myTest();myTest();?>

PHP echo 和 print 语句

echo 和 print 之间的差异:

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

提示:echo 比 print 稍快,因为它不返回任何值。

PHP echo 语句

echo 是一个语言结构,有无括号均可使用:echo 或 echo()。

显示字符串

下面的例子展示如何用 echo 命令来显示不同的字符串(同时请注意字符串中能包含 HTML 标记):

<?phpecho "<h2>PHP is fun!</h2>";echo "Hello world!<br>";echo "I'm about to learn PHP!<br>";echo "This", " string", " was", " made", " with multiple parameters.";?>

在下面的例子中,我们将测试不同的数字。PHP var_dump() 会返回变量的数据类型和值:

<?php $x = 5985;var_dump($x);echo "<br>"; $x = -345; // 负数var_dump($x);echo "<br>"; $x = 0x8C; // 十六进制数var_dump($x);echo "<br>";$x = 047; // 八进制数var_dump($x);?>

PHP 数组

数组在一个变量中存储多个值。

在下面的例子中,我们将测试不同的数组。PHP var_dump() 会返回变量的数据类型和值:

<?php $cars=array("Volvo","BMW","SAAB");var_dump($cars);?>

PHP 对象

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

在 PHP 中,必须明确地声明对象。

首先我们必须声明对象的类。对此,我们使用 class 关键词。类是包含属性和方法的结构。

然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型:

<?phpclass Car{  var $color;  function Car($color="green") {    $this->color = $color;  }  function what_color() {    return $this->color;  }}?>

PHP NULL 值

特殊的 NULL 值表示变量无值。NULL 是数据类型 NULL 唯一可能的值。

NULL 值标示变量是否为空。也用于区分空字符串与空值数据库。

可以通过把值设置为 NULL,将变量清空:

<?php$x="Hello world!";$x=null;var_dump($x);?>

PHP 字符串函数

strlen() 函数返回字符串的长度,以字符计。

strpos() 函数用于检索字符串内指定的字符或文本。

完整的字符串函数参考手册http://www.w3school.com.cn/php/php_ref_string.asp

PHP 常量

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

有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。

注释:与变量不同,常量贯穿整个脚本是自动全局的。

设置 PHP 常量

如需设置常量,请使用 define() 函数 - 它使用三个参数:

  1. 首个参数定义常量的名称
  2. 第二个参数定义常量的值
  3. 可选的第三个参数规定常量名是否对大小写敏感。默认是 false。

下例创建了一个对大小写敏感的常量,值为 "Welcome to W3School.com.cn!":

<?phpdefine("GREETING", "Welcome to W3School.com.cn!");echo GREETING;?>

PHP 字符串运算符

运算符名称例子结果.串接$txt1 = "Hello"$txt2 = $txt1 . " world!"现在 $txt2 包含 "Hello world!".=串接赋值$txt1 = "Hello"$txt1 .= " world!"现在 $txt1 包含 "Hello world!"

下例展示了使用字符串运算符的结果:

<?php$a = "Hello";$b = $a . " world!";echo $b; // 输出 Hello world!$x="Hello";$x .= " world!";echo $x; // 输出 Hello world!?>

PHP 比较运算符

PHP 比较运算符用于比较两个值(数字或字符串):

运算符名称例子结果==等于$x == $y如果 $x 等于 $y,则返回 true。===全等(完全相同)$x === $y如果 $x 等于 $y,且它们类型相同,则返回 true。!=不等于$x != $y如果 $x 不等于 $y,则返回 true。<>不等于$x <> $y如果 $x 不等于 $y,则返回 true。!==不全等(完全不同)$x !== $y如果 $x 不等于 $y,且它们类型不相同,则返回 true。>大于$x > $y如果 $x 大于 $y,则返回 true。<大于$x < $y如果 $x 小于 $y,则返回 true。>=大于或等于$x >= $y如果 $x 大于或者等于 $y,则返回 true.<=小于或等于$x <= $y如果 $x 小于或者等于 $y,则返回 true。

下例展示了使用某些比较运算符的不同结果:

<?php$x=100; $y="100";var_dump($x == $y);echo "<br>";var_dump($x === $y);echo "<br>";var_dump($x != $y);echo "<br>";var_dump($x !== $y);echo "<br>";$a=50;$b=90;var_dump($a > $b);echo "<br>";var_dump($a < $b);?>

PHP 逻辑运算符

运算符名称例子结果and与$x and $y如果 $x 和 $y 都为 true,则返回 true。or或$x or $y如果 $x 和 $y 至少有一个为 true,则返回 true。xor异或$x xor $y如果 $x 和 $y 有且仅有一个为 true,则返回 true。&&与$x && $y如果 $x 和 $y 都为 true,则返回 true。||或$x || $y如果 $x 和 $y 至少有一个为 true,则返回 true。!非!$x如果 $x 不为 true,则返回 true。

PHP 数组运算符

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

运算符名称例子结果+联合$x + $y$x 和 $y 的联合(但不覆盖重复的键)==相等$x == $y如果 $x 和 $y 拥有相同的键/值对,则返回 true。===全等$x === $y如果 $x 和 $y 拥有相同的键/值对,且顺序相同类型相同,则返回 true。!=不相等$x != $y如果 $x 不等于 $y,则返回 true。<>不相等$x <> $y如果 $x 不等于 $y,则返回 true。!==不全等$x !== $y如果 $x 与 $y 完全不同,则返回 true。

下例展示了使用不同数组运算符的不同结果:

<?php$x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; // $x 与 $y 的联合var_dump($z);var_dump($x == $y);var_dump($x === $y);var_dump($x != $y);var_dump($x <> $y);var_dump($x !== $y);?>

PHP - if...elseif....else 语句

请使用 if....elseif...else 语句来选择若干代码块之一来执行

语法

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

下例将输出 "Have a good morning!",如果当前时间 (HOUR) 小于 10,如果当前时间小于 20,则输出 "Have a good day!"。否则将输出 "Have a good night!":

<?php$t=date("H");if ($t<"10") {  echo "Have a good morning!";} elseif ($t<"20") {  echo "Have a good day!";} else {  echo "Have a good night!";}?>

Switch 语句

如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。

使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

语法

switch (expression){case label1:  code to be executed if expression = label1;  break;  case label2:  code to be executed if expression = label2;  break;default:  code to be executed  if expression is different   from both label1 and label2;}

工作原理:

  1. 对表达式(通常是变量)进行一次计算
  2. 把表达式的值与结构中 case 的值进行比较
  3. 如果存在匹配,则执行与 case 关联的代码
  4. 代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
  5. 如果没有 case 为真,则使用 default 语句

PHP 循环

在您编写代码时,经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务,而不是在脚本中添加若干几乎相等的代码行。

在 PHP 中,我们有以下循环语句:

  • while - 只要指定条件为真,则循环代码块
  • do...while - 先执行一次代码块,然后只要指定条件为真则重复循环
  • for - 循环代码块指定次数
  • foreach - 遍历数组中的每个元素并循环代码块

PHP foreach 循环

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

语法

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

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

下面的例子演示的循环将输出给定数组($colors)的值:

<?php $colors = array("red","green","blue","yellow"); foreach ($colors as $value) {  echo "$value <br>";}?>

在 PHP 创建用户定义函数

用户定义的函数声明以关单 "function" 开头:

语法

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

注释:函数名能够以字母或下划线开头(而非数字)。

注释:函数名对大小写不敏感。

PHP 默认参数值

下面的例子展示了如何使用默认参数。如果我们调用没有参数的 setHeight() 函数,它的参数会取默认值:


<?phpfunction setHeight($minheight=50) {  echo "The height is : $minheight <br>";}setHeight(350);setHeight(); // 将使用默认值 50setHeight(135);setHeight(80);?>

在 PHP 中创建数组

在 PHP 中, array() 函数用于创建数组:

array();

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

  • 索引数组 - 带有数字索引的数组
  • 关联数组 - 带有指定键的数组
  • 多维数组 - 包含一个或多个数组的数组

PHP 索引数组

有两种创建索引数组的方法:

索引是自动分配的(索引从 0 开始):

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

或者也可以手动分配索引:

$cars[0]="Volvo";$cars[1]="BMW";$cars[2]="SAAB";

下面的例子创建名为 $cars 的索引数组,为其分配三个元素,然后输出包含数组值的一段文本:

<?php$cars=array("Volvo","BMW","SAAB");echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";?>

获得数组的长度 - count() 函数

遍历索引数组

如需遍历并输出索引数组的所有值,您可以使用 for 循环,就像这样:

<?php$cars=array("Volvo","BMW","SAAB");$arrlength=count($cars);for($x=0;$x<$arrlength;$x++) {  echo $cars[$x];  echo "<br>";}?>

PHP 关联数组

关联数组是使用您分配给数组的指定键的数组。

有两种创建关联数组的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

或者:

$age['Peter']="35";$age['Ben']="37";$age['Joe']="43";

随后可以在脚本中使用指定键:

<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");echo "Peter is " . $age['Peter'] . " years old.";?>

遍历关联数组

如需遍历并输出关联数组的所有值,您可以使用 foreach 循环,就像这样:

<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");foreach($age as $x=>$x_value) {  echo "Key=" . $x . ", Value=" . $x_value;  echo "<br>";}?>

完整的数组函数参考手册http://www.w3school.com.cn/php/php_ref_array.asp

PHP - 数组的排序函数

在本节中,我们将学习如下 PHP 数组排序函数:

  • sort() - 以升序对数组排序
  • rsort() - 以降序对数组排序
  • asort() - 根据值,以升序对关联数组进行排序
  • ksort() - 根据键,以升序对关联数组进行排序
  • arsort() - 根据值,以降序对关联数组进行排序
  • krsort() - 根据键,以降序对关联数组进行排序

PHP 全局变量 - 超全局变量

PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

这些超全局变量是:

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

PHP $_SERVER

$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。

下面的例子展示了如何使用 $_SERVER 中的某些元素:

<?php echo $_SERVER['PHP_SELF'];echo "<br>";echo $_SERVER['SERVER_NAME'];echo "<br>";echo $_SERVER['HTTP_HOST'];echo "<br>";echo $_SERVER['HTTP_REFERER'];echo "<br>";echo $_SERVER['HTTP_USER_AGENT'];echo "<br>";echo $_SERVER['SCRIPT_NAME'];?>

下表列出了您能够在 $_SERVER 中访问的最重要的元素:

元素/代码描述$_SERVER['PHP_SELF']返回当前执行脚本的文件名。$_SERVER['GATEWAY_INTERFACE']返回服务器使用的 CGI 规范的版本。$_SERVER['SERVER_ADDR']返回当前运行脚本所在的服务器的 IP 地址。$_SERVER['SERVER_NAME']返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。$_SERVER['SERVER_SOFTWARE']返回服务器标识字符串(比如 Apache/2.2.24)。$_SERVER['SERVER_PROTOCOL']返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。$_SERVER['REQUEST_METHOD']返回访问页面使用的请求方法(例如 POST)。$_SERVER['REQUEST_TIME']返回请求开始时的时间戳(例如 1577687494)。$_SERVER['QUERY_STRING']返回查询字符串,如果是通过查询字符串访问此页面。$_SERVER['HTTP_ACCEPT']返回来自当前请求的请求头。$_SERVER['HTTP_ACCEPT_CHARSET']返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)$_SERVER['HTTP_HOST']返回来自当前请求的 Host 头。$_SERVER['HTTP_REFERER']返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。$_SERVER['HTTPS']是否通过安全 HTTP 协议查询脚本。$_SERVER['REMOTE_ADDR']返回浏览当前页面的用户的 IP 地址。$_SERVER['REMOTE_HOST']返回浏览当前页面的用户的主机名。$_SERVER['REMOTE_PORT']返回用户机器上连接到 Web 服务器所使用的端口号。$_SERVER['SCRIPT_FILENAME']返回当前执行脚本的绝对路径。$_SERVER['SERVER_ADMIN']该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。$_SERVER['SERVER_PORT']Web 服务器使用的端口。默认值为 “80”。$_SERVER['SERVER_SIGNATURE']返回服务器版本和虚拟主机名。$_SERVER['PATH_TRANSLATED']当前脚本所在文件系统(非文档根目录)的基本路径。$_SERVER['SCRIPT_NAME']返回当前脚本的路径。$_SERVER['SCRIPT_URI']返回当前页面的 URI。

PHP $_REQUEST

PHP $_REQUEST 用于收集 HTML 表单提交的数据。

下面的例子展示了一个包含输入字段及提交按钮的表单。当用户通过点击提交按钮来提交表单数据时, 表单数据将发送到 <form> 标签的 action 属性中指定的脚本文件。在这个例子中,我们指定文件本身来处理表单数据。如果您需要使用其他的 PHP 文件来处理表单数据,请修改为您选择的文件名即可。然后,我们可以使用超级全局变量 $_REQUEST 来收集 input 字段的值:

<html><body><form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">Name: <input type="text" name="fname"><input type="submit"></form><?php $name = $_REQUEST['fname']; echo $name; ?></body></html>

表单元素

表单的 HTML 代码是这样的:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

当提交此表单时,通过 method="post" 发送表单数据。

什么是 $_SERVER["PHP_SELF"] 变量?

$_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。

因此,$_SERVER["PHP_SELF"] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

什么是 htmlspecialchars() 函数?

htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 &lt; 和 &gt; 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。


通过 PHP strtotime() 用字符串来创建日期

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

语法

strtotime(time,now)
PHP 在将字符串转换为日期这方面非常聪明,所以您能够使用各种值:

<?php$d=strtotime("tomorrow");echo date("Y-m-d h:i:sa", $d) . "<br>";$d=strtotime("next Saturday");echo date("Y-m-d h:i:sa", $d) . "<br>";$d=strtotime("+3 Months");echo date("Y-m-d h:i:sa", $d) . "<br>";?>

更多日期实例

下例输出下周六的日期:

<?php$startdate = strtotime("Saturday");$enddate = strtotime("+6 weeks",$startdate);while ($startdate < $enddate) {  echo date("M d", $startdate),"<br>";  $startdate = strtotime("+1 week", $startdate);}?>

所有日期函数的完整手册 http://www.w3school.com.cn/php/php_ref_date.asp


服务器端包含 (SSI) 用于创建可在多个页面重复使用的函数、页眉、页脚或元素。

include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。

包含文件很有用,如果您需要在网站的多张页面上引用相同的 PHP、HTML 或文本的话。

PHP include 和 require 语句

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

include 和 require 语句是相同的,除了错误处理方面:

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

因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。

包含文件省去了大量的工作。这意味着您可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。

语法

include 'filename';

require 'filename';

如何创建 cookie?

setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

语法

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

例子

在下面的例子中,我们将创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一小时后过期:

<?php setcookie("user", "Alex Porter", time()+3600);?><html><body></body></html>

PHP 的 $_COOKIE 变量用于取回 cookie 的值。

在下面的例子中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:

<?php// Print a cookieecho $_COOKIE["user"];// A way to view all cookiesprint_r($_COOKIE);?>

当删除 cookie 时,您应当使过期日期变更为过去的时间点。

删除的例子:

<?php // set the expiration date to one hour agosetcookie("user", "", time()-3600);?>

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

开始 PHP Session

在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

注释:session_start() 函数必须位于 <html> 标签之前:

<?php session_start(); ?><html><body></body></html>

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

<?phpsession_start();// store session data$_SESSION['views']=1;?><html><body><?php//retrieve session dataecho "Pageviews=". $_SESSION['views'];?></body></html>

输出:

Pageviews=1

如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。

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

<?phpunset($_SESSION['views']);?>

您也可以通过 session_destroy() 函数彻底终结 session:

<?phpsession_destroy();?>

注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。



0 0
原创粉丝点击