首页 > 代码库 > PHP 学习笔记(一):基础教程:语法,变量,函数,数组,超全局

PHP 学习笔记(一):基础教程:语法,变量,函数,数组,超全局

PHP简介

PHP 脚本在服务器上执行

什么是 PHP 文件

  • PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码
  • PHP 代码在服务器上执行,而结果以纯文本返回浏览器
  • PHP 文件的后缀是 “.php”

PHP能够做什么

  • PHP 能够生成动态页面内容
  • PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件
  • PHP 能够接收表单数据
  • PHP 能够发送并取回 cookies
  • PHP 能够添加、删除、修改数据库中的数据
  • PHP 能够限制用户访问网站中的某些页面
  • PHP 能够对数据进行加密

通过 PHP,您可以不受限于只输出 HTML。您还能够输出图像、PDF 文件、甚至 Flash 影片。您也可以输出任何文本,比如 XHTML 和 XML。

为什么使用 PHP

  • PHP 运行于各种平台(Windows, Linux, Unix, Mac OS X 等等)
  • PHP 兼容几乎所有服务器(Apache, IIS 等等)
  • PHP 支持多种数据库
  • PHP 是免费的。请从官方 PHP 资源下载:www.php.net
  • PHP 易于学习,并可高效地运行在服务器端

PHP语法

基础PHP语法

PHP 脚本可放置于文档中的任何位置。
PHP 脚本以

<?php
// 此处是 PHP 代码
?>

PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。

PHP 中的注释

PHP 代码中的注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读。

PHP支持三种注释

  1. 单行注释 //
  2. 单行注释 #
  3. 多行注释 /**/
<!DOCTYPE html>
<html>
<body>

<?php
// 这是单行注释

# 这也是单行注释

/*
这是多行注释块
它横跨了
多行
*/
?>

</body>
</html>

PHP中的大小写敏感问题

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

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

PHP变量

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

创建 PHP 变量

PHP 没有创建变量的命令。
变量会在首次为其赋值时被创建(意思就是不给其赋值的时,即没被创建):

<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>

PHP 变量作用域

在 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 是:$x";
} 

myTest();

echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$x";
?>

技术分享

PHP global 关键词

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

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

<?php
$x=5;
$y=10;

function myTest() {
  global $x,$y;
  $y=$x+$y;
}

myTest();
echo $y; // 输出 15
?>

PHP static 关键词

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

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

<?php

function myTest() {
  static $x=0;
  echo $x;
  $x++;
}

myTest();
myTest();
myTest();

?>

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

PHP 5 echo 和 print 语句

echo 和 print 之间的差异:

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

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

PHP echo 语句

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

PHP print 语句

print 也是语言结构,有无括号均可使用:print 或 print()。

PHP数据类型

字符串、整数、浮点数、逻辑、数组、对象、NULL。

PHP 字符串

字符串是字符序列,比如 “Hello world!”。
字符串可以是引号内的任何文本。您可以使用单引号或双引号:

PHP 整数

整数是没有小数的数字。

PHP 浮点数

浮点数是有小数点或指数形式的数字。
在下面的例子中,我们将测试不同的数字。PHP var_dump() 会返回变量的数据类型和值

PHP 逻辑

逻辑是 true 或 false。

PHP 数组

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

PHP 对象

对象是存储数据和有关如何处理数据的信息的数据类型。
在 PHP 中,必须明确地声明对象。
首先我们必须声明对象的类。对此,我们使用 class 关键词。类是包含属性和方法的结构。

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

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

PHP 字符串函数

PHP strlen() 函数

strlen() 函数返回字符串的长度,以字符计。
下例返回字符串 “Hello world!” 的长度:

<?php
echo strlen("Hello world!");
?>

PHP strpos() 函数

strpos() 函数用于检索字符串内指定的字符或文本。
如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。
下例检索字符串 “Hello world!” 中的文本 “world”:

<?php
echo strpos("Hello world!","world");
?>

以上代码的输出是:6。
提示:上例中字符串 “world” 的位置是 6。是 6(而不是 7)的理由是,字符串中首字符的位置是 0 而不是 1。

PHP 常量

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

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

设置 PHP 常量

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

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

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

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

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

<?php
define("GREETING", "Welcome to W3School.com.cn!", true);
echo greeting;
?>

PHP 运算符

PHP 算数运算符

技术分享

PHP 赋值运算符

PHP 赋值运算符用于向变量写值。
PHP 中基础的赋值运算符是 “=”。这意味着右侧赋值表达式会为左侧运算数设置值。
技术分享

PHP 字符串运算符

技术分享

PHP 递增/递减运算符

技术分享

PHP 比较运算符

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

PHP 逻辑运算符

技术分享

PHP 数组运算符

PHP 数组运算符用于比较数组:
技术分享

PHP 条件语句

在 PHP 中,我们可以使用以下条件语句:

  • if 语句 - 如果指定条件为真,则执行代码

  • if…else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码

  • if…elseif….else 语句 - 选择若干段代码块之一来执行

  • switch 语句 - 语句多个代码块之一来执行

PHP 循环语句

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

  • while - 只要指定条件为真,则循环代码块

  • do…while - 先执行一次代码块,然后只要指定条件为真则重复循环

  • for - 循环代码块指定次数

  • foreach - 遍历数组中的每个元素并循环代码块

PHP函数

在 PHP 创建用户定义函数

用户定义的函数声明以关键字”function” 开头:

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

PHP 函数参数

可以通过参数向函数传递信息。参数类似变量。

<?php
function familyName($fname) {
  echo "$fname Zhang.<br>";
}

familyName("Li");
familyName("Hong");
familyName("Tao");
familyName("Xiao Mei");
familyName("Jian");
?>

PHP 默认参数值

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

<?php
function setHeight($minheight=50) {
  echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight(); // 将使用默认值 50
setHeight(135);
setHeight(80);
?>

PHP 函数 - 返回值

如需使函数返回值,请使用 return 语句

PHP数组

数组能够在单独的变量名中存储一个或多个值。

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

在 PHP 中创建数组

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

array();

PHP 索引数组

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

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

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

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

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

PHP 关联数组

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

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

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

或者:

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

遍历关联数组

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

<?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");

foreach($age as $x=>$x_value) {
  echo "Key=" . $x . ", Value="http://www.mamicode.com/ . $x_value;
  echo "<br>";
}
?>

PHP 数组排序

  • sort() - 以升序对数组排序

  • rsort() - 以降序对数组排序

  • asort() - 根据值,以升序对关联数组进行排序

  • ksort() - 根据键,以升序对关联数组进行排序

  • arsort() - 根据值,以降序对关联数组进行排序

  • krsort() - 根据键,以降序对关联数组进行排序

PHP超全局

超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量

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

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

$GLOBALS — 引用全局作用域中可用的全部变量

$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。

PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

下面的例子展示了如何使用超级全局变量 $GLOBALS:

<?php 
$x = 75; 
$y = 25;

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

addition(); 
echo $z; 
?>

结果是:95

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 中访问的最重要的元素:

技术分享

PHP $_REQUEST

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

下面的例子展示了一个包含输入字段及提交按钮的表单。

当用户通过点击提交按钮来提交表单数据时, 表单数据将发送到 标签的 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>

技术分享

技术分享

PHP $_POST

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

下面的例子展示了一个包含输入字段和提交按钮的表单。当用户点击提交按钮来提交数据后,表单数据会发送到 标签的 action 属性中指定的文件。在本例中,我们指定文件本身来处理表单数据。如果您希望使用另一个 PHP 页面来处理表单数据,请用更改为您选择的文件名。然后,我们可以使用超全局变量 $_POST 来收集输入字段的值:

<html>
<body>

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

<?php 
$name = $_POST[‘fname‘]; 
echo $name; 
?>

</body>
</html>

运行结果和$_REQUEST相同

PHP $_GET

PHP GETHTML(method=get)<script type="math/tex" id="MathJax-Element-2">_GET 也可用于收集提交 HTML 表单 (method=”get”) 之后的表单数据。 </script>_GET 也可以收集 URL 中的发送的数据。

<html>
<body>

<?php 
echo "Study " . $_GET[‘subject‘] . " at " . $_GET[‘web‘];
?>

</body>
</html>
<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    PHP 学习笔记(一):基础教程:语法,变量,函数,数组,超全局