跳转到内容

软件工程师手册/语言词典/PHP

来自维基教科书,开放世界中的开放书籍

PHP,代表“PHP:超文本预处理器”,是一种开源脚本语言。它可以嵌入到 HTML 中,类似于 JSP 的工作方式。

PHP 的分类有点困难。创建者将其定义为一种 web 开发脚本语言,而它确实也是。虽然它主要以过程式为主,但也逐渐转向面向对象语言(PHP 5)。所以,PHP 实际上可以是你想要它成为的样子。需要注意的是,它是一种解释型语言,可以被编译成一些东西。 PHP.net 的介绍页面

执行入口点

[编辑 | 编辑源代码]

PHP 通常通过 web 服务器访问,处理包含一些 php 代码的 html 页面,或是一个 php 文件。

在 html 文件中

 <html>
 <body>
 Hello World! <br>
 Today is 
 <?
    $date = date('D M dS');
    echo $date;
 ?>
 </body>
 </html>

或者你可以通过将整个文件包含在 <? 和  ?> 之间来创建一个完整的 php 文件。一般的趋势是将这些文件命名为 .php 文件,用于渲染 html 等内容的文件,以及 .inc 文件,用于库文件。

通用语法

[编辑 | 编辑源代码]

变量前面包含一个 '$',并且不需要声明。行末以分号结尾,与 C 语言类似。与大多数 web 开发脚本语言一样,也有一些全局变量,例如 $_SESSION 和 $_POST、$_GET 以及 $_REQUEST。

一个通用的赋值方式如下所示

 $a = 'bar';
 $b = 4;
// this is an inline comment.  Everything after the // is a comment.

块注释由起始的 /* 和结束的 */ 指定,可以跨越多行。

 /*
  * this is a block comment 
  */

PHP 包含 phpdoc - 可以在函数声明之前的注释中创建 html 手册。它们看起来像这样

 /**
  * Function description
  *
  * @param  <datatype>   <$name of var>   <description of var>
  * 
  * @return <datatype>
  */

这里还可以使用一些其他的 @ 类型。需要生成 phpdoc 的来源。更多内容将陆续推出。

变量声明

[编辑 | 编辑源代码]

声明 i 为一个整数

$i = 1;

或者

$str = 'string';

不需要声明数据类型,所以可以通过将其赋值给其他内容来改变变量的数据类型

$foo = 1;
$foo = 'string';

这里的一个障碍是,你需要知道如何连接字符串以及添加值。

要连接字符串,可以使用 "." 或 ".="。如果你想添加值,则使用 "+" 或 "+="。

如果你这样做

$foo = 'string';
$foo += ' is cool';

你将得到一个数字而不是 "string is cool",因为你添加的是字符串,而不是连接字符串。

方法声明/实现

[编辑 | 编辑源代码]

函数声明

 function foo( $param1, $param2 ) {
     return 'hello';
 }

你可以像这样设置默认参数

 function foo( $param1, $param2=100 ) {
     return 'hello';
 }

你不需要声明任何返回值。

当你在类中声明一个函数时,它看起来与上面显示的相同,唯一的区别是它的物理位置在类边界内。

 class Foo { 
  function bar () {
      return 'something';
  }
 }

作用域

[编辑 | 编辑源代码]

所有变量在 PHP 中只有一个作用域。如果它在函数中,则它具有局部作用域。如果它在函数之外,则它具有全局作用域。

你可以通过两种方式创建全局变量。第一种方法是在函数之外放置它。第二种方法是使用这种方式声明它

global $foo;

这使得它可以在任何地方访问。

要在函数内部访问全局值,你需要声明你正在使用它,否则 php 会认为它与全局变量完全不同。

YES

 $foo = 2;
 function foo() {
     global $foo;
     $bar = 1;
     return $foo + $bar;
 }

NO

 $foo = 3;
 function foo() {
     $bar = 1;
     return $foo + $bar;
 }

PHP 将在函数内部创建 $foo,并且不会将其与全局 $foo 关联起来。“NO”示例中的两个 $foo 是完全不同的实体。

$bar 是局部变量,其作用域仅限于该函数。

PHP 有关于作用域的优秀 文档 可供使用。

条件语句

[编辑 | 编辑源代码]

有典型的 if/else 语句

 if( $a == $b ) {
     $c = $d;
     // can put more statements here
 } else if ( $b == $c ) {
     $c = $e;
     // can put more statements here
 } else {
     $c = $f;
     // can put more statements here
 }

只要条件之后只有一条语句,就可以删除大括号

 if( $a == $b ) 
     $c = $d; // only one statement allowed
 else 
     $c = $f; // only one statement allowed

另一种有效的 if 语句编写方式如下所示

$bar = (($foo == true) ? 'test' : 'not test');

前两种更易于阅读。

还有 case/switch 条件语句

 switch ($foo) {
     case 'foo':
        echo 'bar';
        break;// breaks out of the switch case, to prevent us from running 
              // the stuff below this. 
     case 'bar':
        echo 'foo';
        break; // breaks out of the switch case, to prevent us from running 
               // the stuff below this. 
     default: 
        echo 'empty';
 }

请访问 php 的结构页面 以获取更多信息以及条件语句的其他编写方式。

循环语句

[编辑 | 编辑源代码]

PHP 包含传统的循环 - for 循环、while 循环和 do while 循环。还有一个 foreach 循环。

For

 // prints out the numbers from 0 to 4, as soon as $i equals 5 it stops. 
 for(
     echo $i;
 }

PHP 有一个特殊的 foreach 循环,用于处理数组

 foreach( $fooArray as $key=>$value ) {
     // starting at the begining of the array it will give the key (index) 
     // and value for each item.
 }

 // you can also just say:
 foreach( $fooArray as $value ) {
     // you don't need to use $key
 }

While

 // this counts backwards from 100 printing out each number like this 
 // "100...99...98..." and so on until it reaches 0, then stops
 $i = 100;
 while( $i > 0 ) {
     echo "$i...";
     $i--;
 }
or
 // keeps checking the $cond variable and stops when it equals false
 // if $cond == false from the start, the stuff in the loop will never execute. 
 while( $cond != true ) {
     // do something
 }


Do while

 // this does the same thing as the above "for" loop, only it always executes 
 // at least once before it checks if the condition ($i <5) has been met, 
 // or is still good. 
 $i = 0;
 do {
     $i++
     echo "$i...";
 while( $i < 5 );

请访问 php 的循环页面 以获取更多关于循环以及其他编写方式的信息。

输出语句

[编辑 | 编辑源代码]

以下是如何在 PHP 中打印出“Hello World!”。

echo 'Hello World!';

当你想在字符串中包含 PHP 变量时,你需要使用双引号,因为 PHP 不会解析单引号之间的數據,它只会将其打印出来。

$foo = 'bar';
echo "foo$foo"; 
// prints out foobar;

当字符串中没有变量时,最好使用单引号,因为它可以节省处理时间。

错误处理/恢复

[编辑 | 编辑源代码]

<描述错误处理和恢复。根据需要提供示例。>

PHP 使用数组作为原生数据类型。

 // example 1
 $ages = array();
 $ages['Bobby'] = 12;
 $ages['Rob'] = 12;

 // example 2
 $foo = array();
 $foo[0] = 8;
 $foo[1] = 9;
 $foo[] = 10; // puts 10 in $foo[2]

 // example 3
 $bar[0] = 12; // don't need to specifically declare $bar, it's just nice to. 
 $bar['total'] = 3;
 $bar[] = 13; // put's 13 in $bar[1]

PHP 中的数组非常强大且实用。它们可以像哈希表一样使用,如第一个和第三个示例中所示 - 您可以使用索引和字符串访问数组。您不需要显式声明数组,虽然这是一个好习惯。此外,您也可以像示例 2 中一样,只写两个方括号,例如 $foo[],表示您希望将数据插入到下一个索引中。

<列出该语言本机提供的算法或算法列表的参考。列出在语言中没有提供算法的情况下如何合并算法。或者,如果不可用,请描述一下。>

垃圾回收

[编辑 | 编辑源代码]

<描述垃圾回收是自动的还是手动的。>

物理结构

[编辑 | 编辑源代码]

<描述文件、库和部分通常如何划分和排列。>

<请包含从其他语言切换到这种语言更容易的提示。>

网络参考

[编辑 | 编辑源代码]

有一个很棒的 PHP 库在 php.net。这里有手册以及库页面 - 所以对于任何有一定编程经验的用户来说都很合适。您肯定需要此页面作为库的参考。

书籍和文章

[编辑 | 编辑源代码]

<列出可能有所帮助的其他书籍和文章。请包括这些参考适合哪些级别的读者。(初学者/中级/高级)>

华夏公益教科书