命名空间学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// php四大开发成员 常量,函数,类(接口) 默认是声明在全局空间中的
// 优点:全局调用
// 缺点:不能重复命名
// 命名空间 namespace
 
// function demo()
// {
 
// }
 
// function demo()
// {
     
// }    //报错
 
class UserController{
 
}
 
class UserModel{
 
}
 
class UserView{
 
}
 
class UserCenterView{
 
}
 
 
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
// namespace需要写在脚本的顶部 必须是php的第一条指令(除了declare指令)
/**
 *namespace ns1{
 * }
 * namespace ns2{
 *}
 * 全局空间
 * namespace{
 * }
 *
**/
 
namespace one{
    function demo()
       {
             echo '我是one空间中的demo()函数<br>';
       }
}
 
 
 
namespace two{
    function demo()
       {
            echo '我是two空间中的demo()函数<br>';
       }
 
       demo();
 
       // 在two空间中调用one空间中的demo()
        \one\demo();
}
 
//全局函数
namespace {
    function demo()
       {
            echo '我是全局空间中的demo()函数<br>';
       }
 
       \demo();
       \one\demo();
       \two\demo();
}
 
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
namespace phpcn\cart;
 
class demo
{
    public static function getSite()
    {
        return 'php中文网进阶课购物车<br>';
    }
}
 
echo Demo::getSite();
// 查看类的完全限定名称
echo Demo::class;//phpcn\cart\Demo
 
 
namespace phpcn\order;
class Demo
{
    public static function getSite()
    {
        return 'php中文网进阶课订单<br>';
    }
}
echo Demo::getSite();
 
// 在一个空间中访问另一个子空间中的成员 需要先回到全局空间再进入子空间
echo \phpcn\cart\Demo::getSite();
 
 
 
 
 
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// 子空间和公共空间中存在同名的全局成员 函数 类 优先级 子空间>全局空间
 
function func1()
{
    echo '我是公共空间中的函数'.__FUNCTION__,'<br>';
}
 
class Test
{
    const APP_NAME = 'my blog';
}
 
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace php\ns\one;
require 'dome.php';
function fun1()
{
    echo __NAMESPACE__;
}
 
function var_dump($name)
{
    echo '早上好!'.$name;
}
 
class Test{
    const APP_NAME = 'taobao';
}
fun1();//php\ns\one
 
var_dump('罗月喵');
 
echo Test::APP_NAME;
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// use 在命名空间中的作用
// 1.use 引入别的命名空间到当前空间 as 为引过来的命名空间起别名
// 2.use 引入别的命名空间中的类到当前空间 as 为引过来的命名空间中的类起别名
namespace app\admin\controller;
 
// 控制器类 index
class Index{
    public function index()
    {
        return __METHOD__;
    }
}
 
namespace extend\lib;
// \代表根root 空间
echo (new \app\admin\controller\Index)->index();//app\admin\controller\Index::index
// 1.use 导入命名空间
use app\admin\controller;
// 2.成功导入命名空间以后 就可以不使用类的完全限定名称 来调用类元素
echo (new controller\Index)->index();//app\admin\controller\Index::index
// 3.为空间起一个别名
use app\admin\controller as app;
echo (new app\Index)->index();//app\admin\controller\Index::index
 
 
echo '<hr>';
// 使用use导入别的空间中的类 可以为该类起别名
// use app\admin\controller\Index as Index;
use app\admin\controller\Index as In;
 
// echo (new Index)->index();
echo (new In)->index();
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// 传统方式
// require 'app/admin/controller/Login.php';
// require 'app/admin/controller/User.php';
// require 'app/admin/model/Login.php';
// require 'app/admin/model/User.php';
// 引入类的自动加载器 只是加载类文件
namespace app;
require 'app/admin/autoload.php';
 
 
// 起别名
use app\admin\controller\Login;
use app\admin\controller\User;
use app\admin\model\Login as LoginModel;
use app\admin\model\User as UserModel;
 
$loginController = new Login;
$loginModel = new LoginModel;
$userModel = new UserModel;
$UserController = new User;
 
echo $UserController->index();
?>

  

1
2
3
4
5
6
7
8
9
10
<?php
namespace app\admin\controller;
class Login
{
     
}
 
 
 
?>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
namespace app\admin\controller;
// 控制器 User文件 想使用User model
use app\admin\model\User as UserModel;
class User
{
    public function index()
    {
        $res = UserModel::getInfo();
        return $res;
    }
     
}<?php
namespace app\admin\model;
class User
{
    static function getInfo()
    {
        return '获取到用户信息';
    }
     
}
 
 
 
?>
<?php
// 类的自动加载
 
//  spl_autoload_register(function($className){
//       // 先检查要加载的类
//       echo $className.'<hr>';
//       // 将类的命名空间与类文件所在的路径保持一一映射 linux /  window \
//       $file = str_replace('\\',DIRECTORY_SEPARATOR,$className).'.php';
//     echo $file;
 
//     if(!(is_file($file) && file_exists($file)))
//     {
//         throw new \Exception('文件名不合法或者不存在');
 
//     }
//     require $file;
 
//     // require $className.'.php';
// });
 
 
spl_autoload_register(function($class){
  require $class.'.php';
})
?>
?>

  

  

  

1
2
3
4
5
6
7
8
9
10
<?php
namespace app\admin\model;
class Login
{
     
}
 
 
 
?>

  

posted @   豹纹守宫  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示