php 命名空间的规则,PHP命名空间的使用规则

namespace必须在文件的最开始部分,其次是use语句

php的namespace和C++,C#的一样,旨在限定某一作用集合,不具备java的自动导入能力

在同一个命名空间中,无须使用use

4.命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。

5.不同文件中可以使用同样的命名空间

实例:

统一文件中可以使用多个命名空间,但要注意的是,这种方式极其不规范,这里仅作演示使用.

namespace Article;

//此Comment属于Article空间的元素

class Comment { }

//创建一个名为'MessageBoard'的命名空间

namespace MessageBoard;

//此Comment属于MessageBoard空间的元素

class Comment { }

?>

使用方式:

namespace Article;

const PATH = '/article';

function getCommentTotal() {

return 100;

}

class Comment { }

namespace MessageBoard;

const PATH = '/message_board';

function getCommentTotal() {

return 300;

}

class Comment { }

//调用当前空间的常量、函数和类

echo PATH; ///message_board

echo getCommentTotal(); //300

$comment = new Comment();

//调用Article空间的常量、函数和类

echo \Article\PATH; ///article

echo \Article\getCommentTotal(); //100   注意,这里以 "\"开始,来防止MessageBoard被认为是Article的子空间

$article_comment = new \Article\Comment();

?>

命名空间可以使用子空间

namespace Blog\Article;

class Comment { }

//我用这样的命名空间表示处于blog下的message board模块

namespace Blog\MessageBoard;

class Comment { }

//调用当前空间的类

$comment = new Comment();

//调用Blog\Article空间的类

$article_comment = new \Blog\Article\Comment();

?>

----------------------------------------------------------------------------------------------

文件引入和命名空间问题:文件的引入和命名空间是2个不同放入概念,这是和java等最大的区别

1.include,require引入的文件路径不一定和命名空间要相关才行,统一目录下也可以使用

2.对于面向对象的开发,命名空间+自定义的__autoload函数进行文件的引入,这种方式命名空间和路径必须完全相同

3.对于类文件,使用use时,最好用as转换,如 命名空间为\App\Member\Model的User类,可以转为 use \App\Member\Model\User as User;这样我们引入User.class.php之后,可以缩短对象的创建方式。

4.如上,可能在同一命名空间下有很多类,这个问题我们可以使用

use \App\Member\Model\User as Member

var user = new member\User();

5.当引入文件的命名空间的根namespace和当前文件的命名空间相同,可以不加 "\",如 user Member\Model

---------------------------------------------------------------------------------------------

有时,有些库文件不需要命名空间,那么默认的命名空间是 "\"

我有一个common_inc.php脚本文件,里面有一些好用的函数和类:

代码如下:

function getIP() { }

class FilterXSS { }

?>

在一个命名空间里引入这个脚本,脚本里的元素不会归属到这个命名空间。如果这个脚本里没有定义其它命名空间,它的元素就始终处于公共空间中:

//引入脚本文件

include './common_inc.php';

$filter_XSS = new FilterXSS(); //出现致命错误:找不到Blog\Article\FilterXSS类

$filter_XSS = new \FilterXSS(); //正确

?>

使用use

class Comment { }

//创建一个BBS空间(我有打算开个论坛)

namespace BBS;

//导入一个命名空间

use Blog\Article;

//导入命名空间后可使用限定名称调用元素

$article_comment = new Article\Comment();

//为命名空间使用别名

use Blog\Article as Arte;

//使用别名代替空间名

$article_comment = new Arte\Comment();

//导入一个类

use Blog\Article\Comment;

//导入类后可使用非限定名称调用元素

$article_comment = new Comment();

//为类使用别名

use Blog\Article\Comment as Comt;

//使用别名代替空间名

$article_comment = new Comt();

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值