本例中,通过介绍namespace和use,示范出了class,function的用法,双冒号“::”和箭头“->”的使用范围以及$this和self的区别。

namespace

namespace译为“命名空间”。
顾名思义,就用namespace来在茫茫代码中划出一个空间来管理代码。
它的主要作用是为了解决如下问题:

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

下面举例说明namespace及use的用法,更详细的建议查询php官方文档。但是官方文档关于这块儿的内容让初学者不好理解。

use

use是用来创建别名的。比如下面的例子b.php文件中,用n来代表xs\spaceHelloMyFriend。

示例

a.php文件中定义一个命名空间xs\spaceHelloMyFriend(这个名字随便起),并添加类和函数。
<?php
namespace xs\spaceHelloMyFriend;

class ten
{
    const __const = "十分钟课堂";

    //public:本类、子类和类外部都可以访问;
    //private:只在本类中可以访问,子类和外部都不可以访问;
    //protected:本类和子类中可以访问,类外部不能访问;

    protected $brand;

    //构造函数开始
    public function __construct($brand)
    {
        $this->brand = $brand;
    }
    //构造函数结束

    public static function me()
    {
        return self::__const;
    }

    public function showText()
    {
        return $this->string();
    }

    private function string()
    {
        return "Bingo";
    }

    public function text()
    {
        return $this->brand;
    }
}
b.php文件:
require "a.php"; 
use xs\spaceHelloMyFriend as n;
$n = new n\ten("NinjaTech");
echo $n->showText();//输出Bingo
echo $n::me();//输出十分钟课堂
echo $n::__const;//输出十分钟课堂
echo $n->text();//输出NinjaTech
不使用use也可以,实例化对象时要写出全部namespace。b.php文件:
require "a.php"; 
$n = new xs\spaceHelloMyFriend\ten("NinjaTech");
//如果为使用构造函数
//$n = new xs\spaceHelloMyFriend\ten;
//省略...
使用use但不使用as的情况,即直接使用namespace的最后一个字符串。b.php文件:
require "a.php"; 
use xs\spaceHelloMyFriend;
$n = new spaceHelloMyFriend\ten("NinjaTech");
//如果为使用构造函数
//$n = new spaceHelloMyFriend\ten;
//省略...

注意

名为 PHP 或 php 的命名空间,以及以这些名字开头的命名空间(例如PHP\Classes)被保留用作语言内核使用,而不应该在用户空间的代码中使用。