本例中,通过介绍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
)被保留用作语言内核使用,而不应该在用户空间的代码中使用。
评论区
发表新的留言
您可以留言提出您的疑问或建议。
您的留言得到回复时,会通过您填写的邮箱提醒您。