Linguistic markers

语言标记

上节介绍了PHP的环境搭建,相信你已经迫不及待的想运行一串PHP代码了,本篇文章将介绍一段标准的PHP代码是需要怎样的代码格式才能正常的运行起来。

任何语言都有自己的编码风格和特性,PHP也不例外。在前面几节教程中,想必你也或多或少的了解到了一些代码格式。虽然PHP是从Perl和C发展而来的,有着和他们差不多的语言风格,但是PHP也有自己一些“独特”的地方。在这里,我将着重介绍:什么样的PHP代码能够运行起来,以及简单的介绍编码规范。(待你对PHP有更深入了解时,会着重细致的向你讲解PHP的编码规范。)

PHP很大一个特色就是可以和HTML混编。下面我将写一个和HTML混编的例子,展开向你介绍PHP的基本代码语法。

你可以将一下代码复制,在你的服务器环境中新建一个名为phphtml.php的文件并访问,就能看到结果了。


<?php
    // 申明变量 name
    $name = 'WOWPHP';
?>
<!DOCTYPE html>
<html>
<head>
    <title>测试代码</title>
</head>
<body>
    <?php
        // 简单输出一个包含内容的P标签
        echo "<p>I am a P tag and created by PHP code!</p>";
        // 输出变量 name
        echo "<p>" .$name. "</p>";
    ?>
</body>
</html>
        

上面是一个PHP和HTML混编的例子,下面的一块代码是纯PHP文件的代码范例:我们可以暂且保存为nowtime.php在服务器,并访问它。它可以输出一个字符串和当前的时间。


<?php
// 声明变量 name
$name = 'WOWPHP';
// 输出变量 name
echo "Hi,My name is ".$name;
// 获取服务器时间
$time = date('Y-m-d H:i:s', time());
// 输出当前时间
echo 'Now time is '.$time;
        

不难发现,不管是在HTML中混编PHP,还是在纯PHP代码的文件中,所有需要运行PHP代码的地方都需要一个 <?php 标记作为PHP代码的开始,以 ?> 标记作为结束。

PHP解析器会自动找到代码中被<?php?>包含的代码并解析它们,然后将该标记替换为解析出的内容。除此以外,PHP会忽略掉此标记以外的任何内容。这就是为什么PHP能够和HTML代码共存了。但是不管是混编还是纯PHP,你都需要将代码保存后缀为.php的文件中,这样才能被PHP正确解析。

需要注意的是,在纯PHP代码中,你只需要写入开始标记既可,结束标记可以省略不写,我也不建议你写结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图导致输出多余内容或直接报错。

除了上文所介绍的开始和结束标记风格以外,PHP还有其他风格的语言标记,这些标记不推荐使用,建议只做了解既可。

其他的标记风格 了解即可

<script language="php"> 开始,以 </script> 结束 是长风格标记 复杂 不常用

<? 开始,以 ?> 结束 是短风格标记 会引起兼容性问题

<% 开始,以 %> 结束 是ASP风格标记 移植性差

Instruction separation

指令分隔符

PHP的指令分隔符是表示一段PHP代码结束的标志。亦可称为“结束符”。

同 C 或 Perl 一样,PHP 需要在每个语句后用分号结束指令,强调该语句已经结束。也可以不是很严格的理解为:每写完一行代码就需要在末尾添加一个; 分号。

在PHP中,类似于输出语句、声明变量、函数调用等功能执行语句的末尾都需要添加一个 ; 表示该命令的结束。相反,类似于流程控制、类和函数的声明则不需要结束符来结束,而需要一对{}(大括号)来作为语句分割。

可以配合以下代码了解上述文中的概念定义。


<?php
// 功能执行语句 如 输出语句、声明变量、函数调用等
$name = 'WOWPHP'; // 使用分号结束语句
printMyName();

// 结构定义语句 如 流程控制、类和函数的声明
function printMyName()
{
    if($name === 'WOWPHP'){ // 不需要;结束 而需要 { 开始
        echo "My name is ".$name;
    }
} // 结构定义语句结束使用 }
    

小提示:在PHP文件中,以 ?> 结尾的代码行不需要使用结束符,因为这个结束标记已经隐含表示了一个分号。所以在一个PHP代码段中最后一行可以不用写结束符。但是,为了保证代码的可读性和规范性,不管是不是最后一行,烦请加上结束符

comments

代码说明注释

在任何语言中,注释都是每一个规范的程序中必不可少的一部分。写注释是一个称职的程序员应该具备的良好习惯。为了您和他人的身心健康,请在程序中必要的地方写清楚注释!

PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释,所有PHP的注释的代码都不会被服务器解析,也不会展现在渲染输出的页面中。只供开发人员理解业务逻辑或简要说明程序的用途和用法。或者,你需要临时忽略掉某段代码而不想删除,同样也可以用到注释。

关于PHP注释的详细说明,请看下段代码中的示例:


<?php
/* 在两个反斜杠中加入两个星号即可声明注释
 * 这是一个多行注释 一般用于某个方法的详细说明
 * 介绍参数和用法 或者长篇大论的说明该程序
 * 对应的需求原型等等等...
 */
public function wowphp()
{
    // 短注释 说明一段代码是用来干什么的(C++风格)
    $name = 'WOWPHP';
    # 也可以用井号来作为短注释的开头 (Unix Shell风格)
    $data = $this->saySomething($name);
    /*也可以这样声明短注释(不美观 不推荐)*/
    return $data;
}
        

一般,我们将注释分为以下几种:

  • 多行注释 以 /* 开头,以*/ 结尾。
  • 单行注释 以 // 开头,C++风格。
  • 单行注释 以 # 开头,Unix Shell风格。

什么情况下用注释?用哪种注释?

  • 注释的原则是将问题解释清楚,并不是越多越好。
  • 若干语句作为一个逻辑代码块,这个块的注释可以使用 /* */ 方式。
  • 具体到某一个语句的注释,可以使用行尾注释: //

关于注释的生成也有很多方法,在sublime编辑器中可以利用docblockr快速生成一个方法的注释。如下图:

sublime_text 插件的生成注释功能

PHPDoc注释风格

PHPDoc的做法是在每个函数、类或变量定义前放置一个注释块。并不是所有情况下都要求如此,只是在必要的情况下才这么做。

每个注释块最前面是一个描述,然后是一个或多个可选的参数。例如,向一个函数增加PHPDoc注释时,可以指定输入参数和返回值数据。显然,为变量定义所编写的PHPDoc注释则包含不同的信息。

以下是一个PHPDoc风格的注释事例:


/**
 * Log the query and fire the core query event.
 *
 * @param  string  $sql
 * @param  array   $bindings
 * @param  int     $start
 * @return void
 */
protected function log($sql, $bindings, $start)
{
    $time = number_format((microtime(true) - $start) * 1000, 2);

    Event::fire('laravel.query', array($sql, $bindings, $time));

    static::$queries[] = compact('sql', 'bindings', 'time');
}
        

这个例子中可以看到 @param@return 参数。@param 用于指定函数参数的各个方面:首先是参数的类型(在这里,第一个参数是一个字符 串);接下来是参数名(这里是 $name);最后是一个简短的描述,说明输入的数据应当包含哪些内容。 @return 参数用于提供函数所返回数据的有关信 息:先指定数据的类型,然后是返回数据所包含内容的一个简短描述。

以下是一些PHPDoc的参数


<?php
/**
* @name 名字
* @abstract 申明变量/类/方法
* @access 指明这个变量、类、函数/方法的存取权限
* @author 函数作者的名字和邮箱地址
* @category  组织packages
* @copyright 指明版权信息
* @example 示例
* @final 指明这是一个最终的类、方法、属性,禁止派生、修改。
* @global 指明在此函数中引用的全局变量
* @link 定义在线连接
* @package 定义归属的包的信息
* @param 定义函数或者方法的参数信息
* @return 定义函数或者方法的返回信息
* @see 定义需要参考的函数、变量,并加入相应的超级连接。
* @since 指明该api函数或者方法是从哪个版本开始引入的
* @static 指明变量、类、函数是静态的。
* @throws 指明此函数可能抛出的错误异常,极其发生的情况
* @todo 指明应该改进或没有实现的地方
* @var 定义说明变量/属性。
* @version 定义版本信息
*/
function wowphp($param)
{
    // some code here
}
        

请登录

WOWPHP 账号登录 GitHub 账号登录

还没有账号?现在去注册一个~