- 首先阐述一下概念
命名空间: 声明命名空间的代码应该放在<?php 代码后的第一行。
作用封装和组织相关的php类,类似把相关的文件放在同一目录下一样。
子命名空间使用 \ 分割。
同一空间的所有类没必要写在同一个php文件里。
厂商命名空间是最重要的命名空间,是最顶层的命名空间,用于识别品牌或组织,具有全局唯一性。
使用use 关键字导入代码。
use关键字:
use位置在<?php 标签或命名空间之后。
use必须出现在全局作用域中,不能再类或函数中
全局命名空间: 有些代码没有命名空间,而是在全局命名空间中,使用时要在类、函数、接口、常量前加上 \ 符号
2.使用示例:
phpadvanced 目录下的TestNamespaced.php类
<?php
namespace phpadvanced;
class TestNamespace
{
private static $name="hehe1";
public static function getName(){
echo self::$name."<br />";
}
public static function setName($name){
self::$name = $name;
}
}
phpadvanced/test 目录下的TestNamespaced.php类
<?php
namespace phpadvanced\test;
require_once "../TestNamespace.php";
use phpadvanced\TestNamespace as TestNamespace1;
class TestNamespace
{
private static $name="hehe";
public static function getName(){
echo self::$name."<br />";
}
public static function setName($name){
self::$name = $name;
}
}
$obj = new TestNamespace();
$obj->setName("haha2");
$obj->getName();
TestNamespace1::getName();
http://192.168.15.233:8088/phpadvanced/test/TestNamespace.php
执行结果:
haha2
hehe1分析:在不同目录(不同命名空间下)创建相同的类TestNamespace.php,类包含一个私有的静态变量和两个共有的静态方法。
使用require_once 包含文件后,使用use定义命名空间别名。
3.使用示例2
phpadvanced 目录下的TestNamespaced2.php类
<?php
namespace phpadvanced;
require_once "./TestNamespace.php";
require_once "./test/TestNamespace.php";
use phpadvanced\TestNamespace as TestNamespace1;
use phpadvanced\test\TestNamespace as TestNamespace11;
TestNamespace1::setName("haha");
TestNamespace1::getName();
TestNamespace11::setName("haha2");
TestNamespace11::getName();
http://192.168.15.233:8088/phpadvanced/TestNamespace2.php
执行结果:
haha
haha2
- 全局命名空间示例
phpadvanced 目录下的TestNamespaced3.php类
<?php
namespace phpadvanced;
class TestNamespace3
{
public function test()
{
$exception = new \Exception();
var_dump($exception);
}
}
$obj = new TestNamespace3();
$obj->test();
http://192.168.15.233:8088/phpadvanced/TestNamespace3.php
没有在Exception前加 \ 符号 执行结果:
Fatal error: Class 'phpadvanced\Exception' not found in C:\xampp\htdocs\phpadvanced\TestNamespace3.php on line 8
在Exception前 加 \ 符号,执行结果:
object(Exception)#2 (7) {
["message":protected]=>
string(0) ""
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(46) "C:\xampp\htdocs\phpadvanced\TestNamespace3.php"
["line":protected]=>
int(8)
["trace":"Exception":private]=>
array(1) {
[0]=>
array(6) {
["file"]=>
string(46) "C:\xampp\htdocs\phpadvanced\TestNamespace3.php"
["line"]=>
int(15)
["function"]=>
string(4) "test"
["class"]=>
string(26) "phpadvanced\TestNamespace3"
["type"]=>
string(2) "->"
["args"]=>
array(0) {
}
}
}
["previous":"Exception":private]=>
NULL
}