文章目錄
  1. 1. 1.1基础知识
  2. 2. 1.2 变量
  3. 3. 1.3介绍字符串
  4. 4. 1.4 数字介绍
  5. 5. 1.5 常量介绍
  6. 6. 1.6 单引号与双引号
  7. 7. 2.1 处理HTML 表单
  8. 8. 2.2条件语句和运算符
  9. 9. 2.4 验证表单数据
  10. 10. 2.5 介绍数组
  11. 11. 3.1 包含多个文件
  12. 12. 3.2建立黏性表单
  13. 13. 3.3 创建自己的函数
  14. 14. 4. 对待bug的心态

不久前看完《PHP and MySQL动态网站开发》这本PHP入门书籍,最近找PHP实习前又看了一遍,于是这里写个读书笔记,也算是做个总结。

1.1基础知识

1.函数名不区分大小写
2.单双引号,转义
3.PHP的配置,关闭了display_errors
4.可以使用echo和print发送HTML代码到窗口
5.TML和PHP的空白以及换行,HTML中会影响页面的唯一空白是单个空格,回车符(通过 按Enter键或Return键创建)将变成打印消息的一部分,在双引号内打印换行符(\n)。
6.两个单行和一个多行注释。shell风格;不应该嵌套多行注释。

1.2 变量

1.四种标量(布尔,整型,浮点,字符串),两种非标量(数组,对象),资源(和数据库交互)和NULL(不具有任何值)
2.变量名以$开头,紧接字母或_,区分大小写(自定义变量一般用小写字母,用下划线分隔)
3.无需引号即可打印变量,必须在双引号(不可以在单引号)内打印变量,

1
print "Hello, $name";

4.PHP的预定义变量(特点是以下划线开始,大写),更大的、预定义的$_SERVER变量 ,$_SERVER指大量与服务器相关的信息,可以通过phpinfo()函数查看:

1
2
3
$file = $\_SERVER['SCRIPT\_FILENAME'];    运行的脚本的完整路径和名称          
$user = $\_SERVER['HTTP\_USER_AGENT']; Web浏览器和操作系统
$server = $\_SERVER['SERVER\_SOFTWARE']; 运行PHP的服务器上的Web应用程序

1.3介绍字符串

1.连接运算符(concatenation operator)
即句点 . ,连接还可以处理字符串或数字,如

1
$state . ' ' . 98101 ;

2.PHP具有许多专用于字符串的函数,例如
strlen()strtolower()strtoupper()ucfirst(),第一个字符大写,ucwords(),每个单词的第一个字符大写。

1
$num = strlen('some string'); // 11

3.连接赋值运算符

1
2
$title .= $subtitle; 
$address = "$city, $state";

1.4 数字介绍

  1. 常用函数是round()number_format()。前者用于把小数四舍五入为最接近的数,后者用于把一个数字转换成更常见的表示形式,用逗号作为千位分隔符,这个函数还可以设置小数点的指定位数:
    1
    2
    3
    4
    5
    6
    $n = round ($n); // 3  
    $n = round ($n, 3); // 3.143
    $n = 20943;
    $n = number_format ($n); // 20,943
    $n = 20943;
    $n = number_format ($n, 2); // 20,943.00

2.PHP在大多数平台上支持的最大整数在20亿左右。对于更大的数字,PHP将自动使用浮点类型。PHP手册中包含关于这个主题的信息,以及用于改进计算准确性的备用函数。

1.5 常量介绍

1.全都使用大写字母来命名常量,常量不是变量,只能赋予常量一个标量值,不能更改常量的值。为了访问常量的值,比如当你想打印它时,不能用引号括住常量(因为没有美元符号告诉PHP,USERNAME是不同于字面量文本的任何内容),可以代之以单独打印常量,或者使用连接运算符,比如:

1
2
3
4
5
define ('NAME', value);
echo "Hello, USERNAME"; // Won't work!
echo 'Hello, ';
echo USERNAME;
echo 'Hello, ' . USERNAME;

2.PHP运行时利用了几个预定义的常量,这与本章前面使用的预定义变量非常相像。这些常量包括PHP_VERSION(PHP运行的版本)和PHP_OS(服务器的操作系统)等。
3.经常使用常量来存储你的数据库访问信息。

1.6 单引号与双引号

  1. 括在单引号内的值将照字面意义进行处理,而括在双引号内的值将被解释。换句话说,把变量和特殊字符(参见表1-2)放在双引号内将导致打印出它们表示的值,而不是它们的字面量值。
  2. 当在双引号内使用转义字符时,它们具有特殊的含义。尝试将美元金额打印为$12.34(其中12.34来自于一个变量)。应该对初始美元符号进行转义,print “\$$var”;。在新版本的PHP中,可以使用$$price$$total而不用在前面加反斜杠(\),这得益于一些“内部魔法
  3. 由于PHP将试图找出那些需要将其值插入到双引号内的变量,所以从理论上讲,使用单引号要快一些。有效的HTML常常包括许多用双引号括住的属性,所以当利用PHP打印HTML时,使用单引号最容易,如果想使用双引号打印出这段HTML代码,将不得不对字符串中的所有双引号进行转义。:
    1
    echo '<table width="80%" border="0" cellspacing="2" cellpadding="3" align="center">';

2.1 处理HTML 表单

  1. 对于

    1
    2
    3
    <form action="script.php" method="post">
    <input type="text" name="city" />
    </form>

    无论用户在该元素中输入什么内容,都可以通过一个名为$_REQUEST [‘city’]的PHP变量访问它。$_REQUEST是一个特殊的变量类型,称为超全局(superglobal) 变量。它存储了通过GET或POST方法发送到PHP页面的所有数据,以及在cookie中可访问的数据。

    2.2条件语句和运算符

  2. 对于$var,具有非0值、空字符串、FALSE或NULL,则条件为真;对于isset($var)$var具有不同于NULL的任何值,包括0、FALSE或空字符串,则条件为真;(PHP中NULL表示没有设置)
    2.
    1
    if (isset($_REQUEST['gender'])) {}

这是验证表单输入(特别是对于单选按钮、复选框或选项菜单)的一种简单、有效的方式。

2.4 验证表单数据

1.使用isset()函数的一个问题是:空字符串测试为TRUE,这意味着它不是验证HTML表单中的文本,。要检查用户输入到文本元素中的内容,可以使用empty()函数 ,空(empty)值:空字符串、0、NULL或FALSE 输入和文本框的有效方式 。
2.要测试提交的值是否是数字,可使用is_ numeric()函数

2.5 介绍数组

  1. PHP支持两种数组:索引数组(indexed array)和关联数组(associative array),索引数组的第一个索引开始于0,除非显式指定键。
  2. 只通过引用数组名称来尝试打印一个数组将导致打印单词Array。

    1
    echo "My list of states: $states";
  3. 如果数组使用字符串作为键,用于括住键的引号将使语法变得混乱。当数组使用字符串作为它的键时,把数组名和键包括在花括号中:

    1
    2
    3
    echo "IL is $states['IL']."; // BAD!              
    echo "IL is {$states['IL']}.";
    echo "<p>Thank you, <b>{$_POST['name']}</b>, for the following comments:<br /> <tt>{$_POST['comments']}</tt></p>"

4.PHP默认包括多个预定义的数组,超全局(superglobal)变量:$_GET$_POST$_REQUEST$_SERVER$_ENV$_SESSION$_COOKIE。其中$_GET$_POST$_COOKIE都是$REQUEST的子集。
5.创建数组
第一种方式是,可以一次添加一个元素来构建数组:

1
2
3
$band[] = 'Jemaine';
$band[] = 'Bret';
$band[] = 'Murray';

除了一次添加一个元素这种方式之外,也可以使用array()函数,只用一个步骤即可构建一个完整的数组:

1
$states = array ('IA' => 'Iowa', 'MD' => 'Maryland');

或者,如果你设置了第一个数字键值,那么此后添加的值将是可以递增的键:

1
$days = array (1 => 'Sun', 'Mon', 'Tue');

在引用数组之前,也可使用array()函数初始化它:

1
2
$tv = array();
$tv[] = 'Flight of the Conchords';

如果你想创建连续数字的数组,那么可以使用range()函数:

1
$ten = range (1, 10);

6.访问数组
可以使用foreach()循环:

1
foreach ($array as $value) {// Do something with $value.}

foreach循环将会迭代$array中的每个元素,并把每个元素的值赋予$value变量。要访问键和值,可以使用:

1
foreach ($array as $key => $value) {echo "The value at $key is $value.";}

要确定数组中元素的个数,可以使用count()函数:

1
$num = count($array);

range()函数也可以创建连续字母的数组:

1
$alphabet = range ('a', 'z');

is_array()函数可以确认一个变量是数组类型。

7.多维数组

1
2
3
$primes = array(2, 3, 5, 7, …);
$sphenic = array(30, 42, 66, 70, …);
$numbers = array ('Primes' => $primes, 'Sphenic' => $sphenic);

要访问质数子数组,引用$numbers[‘Primes’]。要访问质数5,可以使用$numbers[‘Primes’][2]
多维数组也可以来自于HTML表单。例如,如果表单具有一系列名称为interests[]的复选框:

1
2
3
<input type="checkbox" name="interests[]" value="Music" /> Music
<input type="checkbox" name="interests[]" value="Movies" /> Movies
<input type="checkbox" name="interests[]" value="Books" /> Books

接收的PHP 页面中的$_POST 是多维的。$_POST[‘interests’] 是一个数组, 并用$_POST[‘interests’][0]存储第一个选中的复选框的值(例如,Movies),用$_POST[‘interests’][1]存储第二个选中的复选框的值(例如,Books),等等。注意:只会把选中的复选框传递到PHP页面。
由于数组和字符串这两种变量类型是如此常用,以至于PHP具有两个函数,可以在字符串和数组之间相互进行转换。

1
2
$array = explode (separator, $string);
$string = implode (glue, $array);

8.数组排序
sort()按值对数组排序,并丢弃原来的键;asort()按值对数组排序,同时还会维持键;ksort()按键对数组排序。 如果把这些函数分别更改为rsort()、arsort()和krsort(),能够以相反的顺序对数组排序。

1
2
ksort($movies); 
foreach ($movies as $title => $rating) { echo "<tr><td>$rating</td> <td>$title</td></tr>\n"; }

要随机排列数组的顺序,可以使用shuffle()。natsort()函数可用于以更自然的顺序对数组排序(主要是更好地处理字符串中的
数字),通过做一点工作可以对多维数组排序。见PHP手册,了解关于usort()函数

3.1 包含多个文件

1.PHP有4个用于外部文件的函数:include()、include_once()、require()和require_once():

1
2
include_once('filename.php');
require('/path/to/filename.html');

2.include()和require()函数在正确工作时完全一样,但是在它们失败时会表现得有所不同。如果include()函数不工作(由于某种原因而不能包含文件),就会向Web浏览器打印一个警告,但是脚本会继续运行。如果require()失败,就会打印一个错误,并且脚本会中止运行,建议把require()用于任务关键的包含文件(像那些连接到数据库的包含文件),为不怎么重要的包含文件使用include()。

3.2建立黏性表单

1.通过isset()函数判断

1
2
3
4
5
6
7
8
9
10
11
 <form action="calculator.php" method="post">
<p>Distance (in miles): <input type="text" name="distance" value="<?php if (isset($_POST['distance'])) echo $_POST['distance']; ?>" /></p>
<p>Ave. Price Per Gallon: <span class="input"> <input type="radio" name="gallon_price" value="3.00" <?php if (isset($_POST ['gallon_price']) && ($_POST['gallon_price'] == '3.00')) echo 'checked="checked" '; ?>/> 3.00
<input type="radio" name="gallon_price" value="3.50" <?php if (isset($_POST ['gallon_price'])&& ($_POST ['gallon_price'] == '3.50')) echo 'checked="checked" '; ?>/> 3.50
<input type="radio" name="gallon_price" value="4.00" <?php if (isset($_POST ['gallon_price'])&& ($_POST['gallon_price'] == '4.00')) echo 'checked="checked" '; ?>/> 4.00
</span></p>
<p>Fuel Efficiency: <select name="efficiency"> <option value="10"<?php if (isset($_POST['efficiency']) && ($_POST['efficiency'] == '10'))echo ' selected="selected"'; ?>Terrible</option>
<option value="20"<?php if (isset($_POST['efficiency']) && ($_POST['efficiency'] == '20'))echo ' selected="selected"'; ?>>Decent</option>
<option value="30"<?php if (isset($_POST['efficiency']) && ($_POST['efficiency'] == '30'))echo ' selected="selected"'; ?>>Very Good</option>
<option value="50"<?php if (isset($_POST['efficiency']) && ($_POST['efficiency'] == '50'))echo ' selected="selected"'; ?>>Outstanding</option></select></p>
<p><input type="submit" name="submit" value="Calculate!" /></p></form>

2.应该总是用双引号括住HTML属性,特别是表单输入框的value属性。如果没有这样做,由多个单词组成的值(如Elliott Smith)在Web浏览器中只会显示为Elliott。

3.3 创建自己的函数

1.在PHP中,函数名称不区分大小写(与变量名称不同)

1
function function_name () {// Function code.}

2.习惯把函数定义放在靠近脚本顶部的位置,或者放在一个单独的文件中,在函数定义的末尾加上一条注释是很好的习惯

1
2
3
4
5
6
7
8
<?php # Script 3.7 - index.php #2
function create_ad() {
echo '<p class="ad">This is an annoying ad! This is an annoying ad! This is an annoying ad!
This is an annoying ad!</p>'; }

$page_title = 'Welcome to this Site!';
include ('includes/header.html');
create_ad(); ?>
<h1>Content Header</h1>

3.由于用户定义的函数会占用一些内存,所以在使用这样一个函数时应该小心谨慎。一般的规则是,最好把这些函数用于可能在脚本或Web站点的多个位置执行的大段代码。
4.你可以根据需要为多个参数设置默认值,只要这些参数出现在函数定义的最后面即可。换句话说,必需的参数应该总是出现在最前面

1
2
3
4
5
function create_radio($value, $name = 'gallon_price') { 
echo '<input type="radio" name="' . $name .'" value="' . $value . '"';
if (isset($_POST[$name]) && ($_POST[$name] == $value)) {
echo ' checked="checked"'; }
}

现在这个函数更通用,也可以创建其他单选按钮了!!!

5.从函数返回值.要让一个函数返回多个值,可以使用array()函数返回一个数组。通过在脚本3-10中把返回行更改为:

1
return array ($var1, $var2);

在调用返回一个数组的函数时,可使用list()函数将数组元素赋予各个变量:

1
list($v1, $v2) = some_function();

6.变量的作用域是它们所驻留的页面。因此,如果你定义了$var,页面的余下部分就可以访问$var,但是,其他页面一般不能访问它(除非使用特殊的变量),因为包含文件像它们是原始(包含)脚本的一部分那样工作,所以在include()那一行之前定义.这意味着在一个函数内使用的变量不能在其外部使用,在一个函数外部定义的变量不能在其内部使用的变量可供包含文件使用。此外,包含文件内定义的变量可供include()那一行之后的父(包含)脚本使用。避开变量作用域的另一个方法是利用超全局变量:$_GET$_POST$_REQUEST等。这些变量在
你的函数内是自动可访问的(因此,它们是超全局变量)。也可以添加元素到$GLOBALS数组中,使得可以在函数内使用它们。。依靠函数内的全局变量将使得它们更依赖于上下文,因而不太有用。

4. 对待bug的心态

1.当你受挫时,就离开计算机!休息一会儿,清醒一下头脑,并用明亮的双眼重新审视代码。
2.请求陌生人的帮助时,富有耐心和幽默感可以得到好得多和快得多的结果。PHP代码一般与浏览器无关
3.我强烈反对随意猜测解决问题的办法。我见过太多的人在没有完全理解应该改变什么或者不应该改变什么的情况下尝试解决问题,这只能使事情进一步复杂化。
4.编写自己的代码时要确保它不会中断,即使用户没有做正确的事情也会如此!

文章目錄
  1. 1. 1.1基础知识
  2. 2. 1.2 变量
  3. 3. 1.3介绍字符串
  4. 4. 1.4 数字介绍
  5. 5. 1.5 常量介绍
  6. 6. 1.6 单引号与双引号
  7. 7. 2.1 处理HTML 表单
  8. 8. 2.2条件语句和运算符
  9. 9. 2.4 验证表单数据
  10. 10. 2.5 介绍数组
  11. 11. 3.1 包含多个文件
  12. 12. 3.2建立黏性表单
  13. 13. 3.3 创建自己的函数
  14. 14. 4. 对待bug的心态