沉淀,再出发:PHP的简单使用

沉淀,再出发:PHP的简单使用

一、前言

    关于PHP,笔者在本科的时候就听到了太多太多,可惜虽然看了很多的教材,听到了无数遍,也没有系统性的整理过和学习过这方面的知识,这点无论什么时候想起来都是一种遗憾,于是笔者打算总结一下PHP的简单使用。其实对于一门语言的学习来说,只要掌握了语言特性,其他的都是迎刃而解的,语言无外乎顺序、分支、循环语句,这是从功能上面进行划分的,适用于任何的语言,其实学过了编译原理之后,在我们的大脑之中就不应该有语言的概念了,而是应该从更高的层次,从语言的简洁性、可移植性、执行的效率、设计的初衷、方便做的事情、语言之中包含的理念和哲学思维这些方面来思考一门语言的好坏。

二、PHP的基本语法与特性

    PHP是一种开源,解释和面向对象脚本语言运行在服务端。并且具有开源、独立平台、兼容性、嵌入式脚本等特点,越来越多的被用于Web开发。大多数情况下,运行在服务端的PHP脚本要依赖Apache、Nginx这样的Web服务器来运行。PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP 是免费的,并且使用非常广泛。

    PHP 代表 PHP: Hypertext Preprocessor
    PHP 是一种使用广泛的开源的脚本语言
    PHP 脚本在服务器上执行
    PHP 可免费下载使用

    PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
    PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器
    PHP 文件的默认文件扩展名是 ".php"

    PHP 可以生成动态页面内容
    PHP 可以创建、打开、读取、写入、关闭服务器上的文件
    PHP 可以收集表单数据
    PHP 可以发送和接收 cookies
    PHP 可以添加、删除、修改您的数据库中的数据
    PHP 可以限制用户访问您的网站上的一些页面
    PHP 可以加密数据
    PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等)
    PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等)
    PHP 提供了广泛的数据库支持
    PHP 便于于学习,并可高效地运行在服务器

      通过 PHP,不再限于输出 HTML。还可以输出图像、PDF 文件,甚至 Flash 电影和任意的文本,比如 XHTML和 XML。

2.0、安装php的IDE

    其实很简单,最快捷的方法就是下载一个wamp,这个软件是windows+Apache+mysql+php的缩写,php运行需要一个服务器,并且还需要mysql数据库,而这个软件将这些需要的环境早就集成到一起了,我们可以直接安装和使用。

    在使用的时候需要将我们的php文件放到wamp安装目录的www目录之下,这样我们通过浏览器访问localhost+保存的文件夹+文件名就可以了。

2.1、基本的 PHP 语法    

   PHP 脚本可以放置在文档中的任何位置,以 <?php 开始,以 ?> 结束。PHP 文件的默认文件扩展名是 ".php"。PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。

 1  <!DOCTYPE html>
 2 <html>
 3 <body>
 4 
 5 <h1>My first PHP page</h1>
 6 
 7 <?php
 8 echo "Hello World!";
 9 ?>
10 
11 </body>
12 </html> 

2.2、变量、定义域

    PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
PHP 是一门松散类型的语言,PHP 变量规则:

    变量以 $ 符号开始,后面跟着变量的名称
    变量名必须以字母或者下划线字符开始
    变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
    变量名不能包含空格
    变量名是区分大小写的($y$Y 是两个不同的变量)
    PHP 没有声明变量的命令。
    变量在您第一次赋值给它的时候被创建。

    PHP 变量作用域:变量的作用域是脚本中变量可被引用/使用的部分。PHP 有四种不同的变量作用域:

    local
    global
    static
    parameter

    局部和全局作用域
    在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。

 1 <html>
 2 <body>
 3 
 4 <?php
 5 echo "=======局部和全局作用域=======";
 6 echo "<br>";
 7   $x=5; // global scope
 8  
 9 function myTest1()
10 {
11 $y=10; // local scope
12 echo "<p>Test variables inside the function:<p>";
13 echo "Variable x is: $x";
14 echo "<br>";
15 echo "Variable y is: $y";
16 }
17 myTest1();
18 echo "<br>";
19 
20 echo "<p>Test variables outside the function:<p>";
21 echo "Variable x is: $x";
22 echo "<br>";
23 echo "Variable y is: $y";
24 echo "<br>";
25 
26 echo '========PHP global 关键字=========';
27 echo "<br>";
28 
29 $g_x=5;
30 $g_y=10;
31 
32 function myTest2()
33 {
34 global $g_x,$g_y;
35 $g_y=$g_x+$g_y;
36 }
37 
38 myTest2();
39 echo $g_y; // 输出 15
40 
41 echo "<br>";
42 echo "==========\$GLOBALS[]===========";
43 echo "<br>";
44 /*PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
45 上面的实例可以写成这样:*/
46 $temp_x=5;
47 $temp_y=10;
48 
49 function myTest3()
50 {
51 $GLOBALS['temp_y']=$GLOBALS['temp_x']+$GLOBALS['temp_y'];
52 }
53 
54 myTest3();
55 echo $temp_y;
56 echo "<br>";
57 
58 echo "========Static 作用域=========";
59 echo "<br>";
60 function add()
61 {
62 static $add_x=0;
63 echo $add_x;
64 echo "<br>";
65 $add_x++;
66 }
67 
68 add();
69 add();
70 add();
71 
72 ?>
73 
74 </body>
75 </html>

2.3、PHP 字符串变量

PHP 并置运算符:在 PHP 中,只有一个字符串运算符。并置运算符 (.) 用于把两个字符串值连接起来。
PHP strlen() 函数:有时知道字符串值的长度是很有用的。strlen() 函数返回字符串的长度(字符数)。
PHP strpos() 函数:strpos() 函数用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE
addcslashes()    返回在指定的字符前添加反斜杠的字符串。
addslashes()    返回在预定义的字符前添加反斜杠的字符串。
bin2hex()                    把 ASCII 字符的字符串转换为十六进制值。
chop()                    移除字符串右侧的空白字符或其他字符。
chr()                    从指定 ASCII 值返回字符。
chunk_split()    把字符串分割为一连串更小的部分。
convert_cyr_string()    把字符串由一种 Cyrillic 字符集转换成另一种。
convert_uudecode()    对 uuencode 编码的字符串进行解码。
convert_uuencode()    使用 uuencode 算法对字符串进行编码。
count_chars()    返回字符串所用字符的信息。
crc32()                    计算一个字符串的 32 位 CRC(循环冗余校验)。
crypt()                    单向的字符串加密法(hashing)。
echo()                    输出一个或多个字符串。
explode()                    把字符串打散为数组。
fprintf()                    把格式化的字符串写入到指定的输出流。
get_html_translation_table()    返回 htmlspecialchars() 和 htmlentities() 使用的翻译表。
hebrev()                    把希伯来(Hebrew)文本转换为可见文本。
hebrevc()                    把希伯来(Hebrew)文本转换为可见文本,并把新行(\n)转换为 <br>。
hex2bin()                    把十六进制值的字符串转换为 ASCII 字符。
html_entity_decode()    把 HTML 实体转换为字符。
htmlentities()    把字符转换为 HTML 实体。
htmlspecialchars_decode()    把一些预定义的 HTML 实体转换为字符。
htmlspecialchars()    把一些预定义的字符转换为 HTML 实体。
implode()                    返回一个由数组元素组合成的字符串。
join()                    implode() 的别名。
lcfirst()                    把字符串中的首字符转换为小写。
levenshtein()    返回两个字符串之间的 Levenshtein 距离。
localeconv()    返回本地数字及货币格式信息。
ltrim()                    移除字符串左侧的空白字符或其他字符。
md5()                    计算字符串的 MD5 散列。
md5_file()                    计算文件的 MD5 散列。
metaphone()    计算字符串的 metaphone 键。
money_format()    返回格式化为货币字符串的字符串。
nl_langinfo()    返回指定的本地信息。
nl2br()                    在字符串中的每个新行之前插入 HTML 换行符。
number_format()    通过千位分组来格式化数字。
ord()                    返回字符串中第一个字符的 ASCII 值。
parse_str()                    把查询字符串解析到变量中。
print()                    输出一个或多个字符串。
printf()                    输出格式化的字符串。
quoted_printable_decode()    把 quoted-printable 字符串转换为 8 位字符串。
quoted_printable_encode()    把 8 位字符串转换为 quoted-printable 字符串。
quotemeta()    引用元字符。
rtrim()                    移除字符串右侧的空白字符或其他字符。
setlocale()                    设置地区信息(地域信息)。
sha1()                    计算字符串的 SHA-1 散列。
sha1_file()                    计算文件的 SHA-1 散列。
similar_text()    计算两个字符串的相似度。
soundex()                    计算字符串的 soundex 键。
sprintf()                    把格式化的字符串写入一个变量中。
sscanf()                    根据指定的格式解析来自一个字符串的输入。
str_getcsv()    把 CSV 字符串解析到数组中。
str_ireplace()    替换字符串中的一些字符(大小写不敏感)。
str_pad()                    把字符串填充为新的长度。
str_repeat()    把字符串重复指定的次数。
str_replace()    替换字符串中的一些字符(大小写敏感)。
str_rot13()                    对字符串执行 ROT13 编码。
str_shuffle()    随机地打乱字符串中的所有字符。
str_split()                    把字符串分割到数组中。
str_word_count()    计算字符串中的单词数。
strcasecmp()    比较两个字符串(大小写不敏感)。
strchr()                    查找字符串在另一字符串中的第一次出现。(strstr() 的别名。)
strcmp()                    比较两个字符串(大小写敏感)。
strcoll()                    比较两个字符串(根据本地设置)。
strcspn()                    返回在找到任何指定的字符之前,在字符串查找的字符数。
strip_tags()    剥去字符串中的 HTML 和 PHP 标签。
stripcslashes()    删除由 addcslashes() 函数添加的反斜杠。
stripslashes()    删除由 addslashes() 函数添加的反斜杠。
stripos()                    返回字符串在另一字符串中第一次出现的位置(大小写不敏感)。
stristr()                    查找字符串在另一字符串中第一次出现的位置(大小写不敏感)。
strlen()                    返回字符串的长度。
strnatcasecmp()    使用一种"自然排序"算法来比较两个字符串(大小写不敏感)。
strnatcmp()    使用一种"自然排序"算法来比较两个字符串(大小写敏感)。
strncasecmp()    前 n 个字符的字符串比较(大小写不敏感)。
strncmp()                    前 n 个字符的字符串比较(大小写敏感)。
strpbrk()                    在字符串中搜索指定字符中的任意一个。
strpos()                    返回字符串在另一字符串中第一次出现的位置(大小写敏感)。
strrchr()                    查找字符串在另一个字符串中最后一次出现。
strrev()                    反转字符串。
strripos()                    查找字符串在另一字符串中最后一次出现的位置(大小写不敏感)。
strrpos()                    查找字符串在另一字符串中最后一次出现的位置(大小写敏感)。
strspn()                    返回在字符串中包含的特定字符的数目。
strstr()                    查找字符串在另一字符串中的第一次出现(大小写敏感)。
strtok()                    把字符串分割为更小的字符串。
strtolower()    把字符串转换为小写字母。
strtoupper()    把字符串转换为大写字母。
strtr()                    转换字符串中特定的字符。
substr()                    返回字符串的一部分。
substr_compare()    从指定的开始位置(二进制安全和选择性区分大小写)比较两个字符串。
substr_count()    计算子串在字符串中出现的次数。
substr_replace()    把字符串的一部分替换为另一个字符串。
trim()                    移除字符串两侧的空白字符和其他字符。
ucfirst()                    把字符串中的首字符转换为大写。
ucwords()                    把字符串中每个单词的首字符转换为大写。
vfprintf()                    把格式化的字符串写到指定的输出流。
vprintf()                    输出格式化的字符串。
vsprintf()                    把格式化字符串写入变量中。
wordwrap()    按照指定长度对字符串进行折行处理。
View Code

2.4、语句语法

 1 if (条件)
 2 {
 3 if 条件成立时执行的代码;
 4 }
 5 else if (条件)
 6 {
 7 elseif 条件成立时执行的代码;
 8 }
 9 else
10 {
11 条件不成立时执行的代码;
12 } 
 1 <html>
 2 <head></head>
 3 <body>
 4     
 5 <?php
 6 $t=date("H");
 7 if ($t<"10")
 8 {
 9 echo "Have a good morning!";
10 }
11 else if ($t<"20")
12 {
13 echo "Have a good day!";
14 }
15 else
16 {
17 echo "Have a good night!";
18 }
19 ?> 
20 
21 </body>
22 </html>

switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
} 
 1 <!DOCTYPE html>
 2 <html>
 3 <body>
 4 
 5 <?php
 6 $favcolor="red";
 7 switch ($favcolor)
 8 {
 9 case "red":
10    echo "Your favorite color is red!";
11    break;
12 case "blue":
13    echo "Your favorite color is blue!";
14    break;
15 case "green":
16    echo "Your favorite color is green!";
17    break;
18 default:
19    echo "Your favorite color is neither red, blue, or green!";
20 }
21 ?>
22  
23 </body>
24 </html>

2.5、数组

在 PHP 中,array() 函数用于创建数组。
在 PHP 中,有三种类型的数组:

    数值数组 - 带有数字 ID 键的数组
    关联数组 - 带有指定的键的数组,每个键关联一个值
    多维数组 - 包含一个或多个数组的数组

PHP 数值数组

1 这里有两种创建数值数组的方法:
2 自动分配 ID 键(ID 键总是从 0 开始):
3 $cars=array("Volvo","BMW","Toyota");
4 人工分配 ID 键:
5 $cars[0]="Volvo";
6 $cars[1]="BMW";
7 $cars[2]="Toyota"; 

count() 函数用于返回数组的长度(元素的数量)。

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

1 这里有两种创建关联数组的方法:
2 $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
3 or:
4 $age['Peter']="35";
5 $age['Ben']="37";
6 $age['Joe']="43";

遍历关联数组:遍历并打印关联数组中的所有值,可以使用 foreach 循环

1 <?php
2 $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
3 
4 foreach($age as $x=>$x_value)
5 {
6 echo "Key=" . $x . ", Value=" . $x_value;
7 echo "<br>";
8 }
9 ?> 

PHP 多维数组

 多维数组是包含一个或多个数组的数组。在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。

$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);
上面的数组将输出如下:
Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
)
让我们试着显示上面数组中的某个值:
echo "Is " . $families['Griffin'][2] . " a part of the Griffin family?";
上面的代码将输出:
Is Megan a part of the Griffin family? 
View Code
1     sort() - 对数组进行升序排列
2     rsort() - 对数组进行降序排列
3     asort() - 根据关联数组的值,对数组进行升序排列
4     ksort() - 根据关联数组的键,对数组进行升序排列
5     arsort() - 根据关联数组的值,对数组进行降序排列
6     krsort() - 根据关联数组的键,对数组进行降序排列

2.6、PHP 超级全局变量

     超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用,不需要特别说明,就可以在函数及类中使用。
       PHP 超级全局变量列表:

1     $GLOBALS
2     $_SERVER
3     $_REQUEST
4     $_POST
5     $_GET
6     $_FILES
7     $_ENV
8     $_COOKIE
9     $_SESSION

PHP $GLOBAL
    $GLOBAL 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
    $GLOBAL 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
PHP $_SERVER
    $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
   下表列出了所有 $_SERVER 变量中的重要元素:

 1 元素/代码                                                描述
 2 $_SERVER['PHP_SELF']    当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
 3 $_SERVER['GATEWAY_INTERFACE']    服务器使用的 CGI 规范的版本;例如,"CGI/1.1" 4 $_SERVER['SERVER_ADDR']    当前运行脚本所在的服务器的 IP 地址。
 5 $_SERVER['SERVER_NAME']    当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.ziqiangxuetang.com)
 6 $_SERVER['SERVER_SOFTWARE']    服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
 7 $_SERVER['SERVER_PROTOCOL']    请求页面时通信协议的名称和版本。例如,"HTTP/1.0" 8 $_SERVER['REQUEST_METHOD']    访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT" 9 $_SERVER['REQUEST_TIME']    请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
10 $_SERVER['QUERY_STRING']    query string(查询字符串),如果有的话,通过它进行页面访问。
11 $_SERVER['HTTP_ACCEPT']    当前请求头中 Accept: 项的内容,如果存在的话。
12 $_SERVER['HTTP_ACCEPT_CHARSET']    当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"13 $_SERVER['HTTP_HOST']    当前请求头中 Host: 项的内容,如果存在的话。
14 $_SERVER['HTTP_REFERER']    引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
15 $_SERVER['HTTPS']    如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
16 $_SERVER['REMOTE_ADDR']    浏览当前页面的用户的 IP 地址。
17 $_SERVER['REMOTE_HOST']    浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
18 $_SERVER['REMOTE_PORT']    用户机器上连接到 Web 服务器所使用的端口号。
19 $_SERVER['SCRIPT_FILENAME']    当前执行脚本的绝对路径。
20 $_SERVER['SERVER_ADMIN']    该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@ziqiangxuetang.com)
21 $_SERVER['SERVER_PORT']    Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
22 $_SERVER['SERVER_SIGNATURE']    包含了服务器版本和虚拟主机名的字符串。
23 $_SERVER['PATH_TRANSLATED']    当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
24 $_SERVER['SCRIPT_NAME']    包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。
25 $_SERVER['SCRIPT_URI']    URI 用来指定要访问的页面。例如 "/index.html"。
View Code

PHP $_REQUEST
    PHP $_REQUEST 用于收集HTML表单提交的数据。
PHP $_POST
    PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
PHP $_GET
    PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。$_GET 也可以收集URL中发送的数据。

2.7、创建 PHP 函数

 1 语法:
 2     function functionName()
 3     {
 4        要执行的代码;
 5      }
 6 PHP 函数准则:
 7     函数的名称应该提示出它的功能
 8     函数名称以字母或下划线开头(不能以数字开头)
 9 PHP 函数 - 返回值
10     如需让函数返回一个值,请使用 return 语句。

2.8、PHP魔术变量

    PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变。这些特殊的常量不区分大小写。

 1 __LINE__:文件中的当前行号。
 2 
 3 __FILE__:文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),
而在此之前的版本有时会包含一个相对路径。
4 5 __DIR__:文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。
(PHP 5.3.0中新增) 6 7 __FUNCTION__:函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。
在 PHP 4 中该值总是小写字母的。 8 9 __CLASS__:类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,
__CLASS__ 是调用 trait 方法的类的名字。 10 11 __TRAIT__:Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。
其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
12 13 <?php 14 class Base { 15 public function sayHello() { 16 echo 'Hello '; 17 } 18 } 19 20 trait SayWorld { 21 public function sayHello() { 22 parent::sayHello(); 23 echo 'World!'; 24 } 25 } 26 27 class MyHelloWorld extends Base { 28 use SayWorld; 29 } 30 31 $o = new MyHelloWorld(); 32 $o->sayHello(); 33 ?> 34 以上例程会输出: 35 Hello World! 36 37 __METHOD__:类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 38 39 __NAMESPACE__:当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

2.9、命名空间(namespace)

   命名空间(namespace)是在PHP 5.3中加入的,在PHP当中还是有着相当重要的意义。
   PHP 命名空间可以解决以下两类问题:

    用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
    为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

   定义命名空间:默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。
   命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。语法格式如下;

 1 < ?php  
 2 // 定义代码在 'MyProject' 命名空间中  
 3 namespace MyProject;  
 4  
 5 // ... 代码 ...  
 6 
 7 你也可以在同一个文件中定义不同的命名空间代码,如:
 8 
 9 < ?php  
10 namespace MyProject1;  
11 // MyProject1 命名空间中的PHP代码  
12  
13 namespace MyProject2;  
14 // MyProject2 命名空间中的PHP代码    
15  
16 // 另一种语法
17 namespace MyProject3 {  
18  // MyProject3 命名空间中的PHP代码    
19 }  
20 ?>  

     在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。

 1 <?php
 2 declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码
 3 namespace MyProject {
 4 
 5 const CONNECT_OK = 1;
 6 class Connection { /* ... */ }
 7 function connect() { /* ... */  }
 8 }
 9 
10 namespace { // 全局代码
11 session_start();
12 $a = MyProject\connect();
13 echo MyProject\Connection::start();
14 }
15 ?>

   以下代码会出现语法错误:

1 <html>
2 <?php
3 namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
4 ?>

三、总结

    学习了PHP的基本语法,可以看到语法和C语言特别的相似,但是还是有一些细节上的东西是有很大区别的,最大的区别就是语言的特性,所用的地方,以及相应的库函数,可以看到PHP之所以强大,其实是和它所内置的函数非常有关系的,并且还有很强的交互能力,通过对PHP的学习,我们再次看到了HTML这种语法可以包含的语言类型实在是太多了。

posted @ 2018-09-17 20:43  精心出精品  阅读(391)  评论(0编辑  收藏  举报