<?php
// php四大开发成员 常量,函数,类(接口) 默认是声明在全局空间中的
// 优点:全局调用
// 缺点:不能重复命名
// 命名空间 namespace
// function demo()
// {
// }
// function demo()
// {
// } //报错
class UserController{
}
class UserModel{
}
class UserView{
}
class UserCenterView{
}
?>
<?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();
}
?>
<?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();
?>
<?php
// 子空间和公共空间中存在同名的全局成员 函数 类 优先级 子空间>全局空间
function func1()
{
echo '我是公共空间中的函数'.__FUNCTION__,'<br>';
}
class Test
{
const APP_NAME = 'my blog';
}
?>
<?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;
?>
<?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();
?>
<?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();
?>
<?php
namespace app\admin\controller;
class Login
{
}
?>
<?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';
})
?>
?>
<?php
namespace app\admin\model;
class Login
{
}
?>